jQuery筛选元素

        虽然层次选择器 + 过滤选择器时也能做到筛选元素功能,但当HTML的DOM结构复杂时,获取元素效率就会很慢,而且选取器字符串过长很不便于阅读,所以可以使用jQuery的相关方法来辅助筛选元素,会比较方便直观,更符合逻辑。

筛选元素的常用方法

  • parent():获取匹配元素的父元素。
  • children():获取匹配元素的所有子元素。
  • next() :获取匹配元素的下一个元素。(注意:是同级元素)
  • prev() :获取匹配元素的上一个元素。
  • siblings() :获取匹配元素前后的同辈元素。
  • closest():获取最近的匹配元素。首先从当前元素查找,找到就返回该元素。未找到逐级向上查找,如果找不到,返回一个空的jQuery对象。
  • find():在后代元素中搜索所有匹配的元素,非常有用。
<!-- 文档结构 -->  
  <div id="div1">
        <p>p标签</p>
        <ul>
            <li>一号</li>
            <li>二号</li>
            <li>三号</li>
            <li>四号</li>
        </ul>
        <p>p标签2</p>
        <h4>第一个h4标签</h4>
        <h4>第二个h4标签</h4>
        <div id="div2">
            <ol>
                <li>有序1</li>
                <li>有序2</li>
            </ol>
        </div>
    </div>
//获取<ol>元素的父元素,然后获取它的id
        var $parId = $("ol").parent().attr("id");
        console.log("#" + $parId);

        //获取id为div1的元素中所有子元素
        var $children = $("#div1").children();
        
        //选取所有<p>元素,获取它们的下个元素
        var $next = $("p").next();

        //筛选出 <ul>的下一个元素并匹配<h4>元素。这里不匹配,所以返回空jQuery对象
        var $nextArgs = $("ul").next("h4"); 
        
        //筛选<ul>元素之后的所有<h4>元素
        var $nextAll = $("ul").nextAll("h4");

        //筛选ul中所有li元素,匹配第二个li元素的上个元素
        var $prev = $("ul li").eq(1).prev();

        //筛选出<ul>元素的所有同辈元素
        var $siblings = $("ul").siblings();
        //其他方式实现
        var $siblings = $("ul").parent().children().not("ul"); //children(":not('ul')");

        //事件委托方式:给<ul>元素加上一个点击事件
        $("ul").on("click", function(e){
            //拿到事件源, 从元素本身开始匹配<li>元素,匹配到就修改样式
            $(e.target).closest("li").css("color", "red");
        });

        //测试结果,请自行填入相应变量,控制台查看。
        console.log();


除了以上这些,还有许多筛选元素的方法,但不一一介绍了。如需详细了解:单击链接:jQuery-3.2.1的API文档 ,建议收藏!还有一个jQuery教程网站也不错,链接:jQuery教程。



jQuery操作CSS样式

        如果是通过attr() 来设置style或class,那么新style属性值会替换旧style属性值,class也是如此,那么之前的style就会作废,非常不灵活。所以应该使用如下方法来操作样式:

  • css(name, value) :给匹配元素的内联样式中设置相关样式。 css()方法同样也具备get和set作用。
  • addClass(“className”):给匹配元素的class属性添加类名。
  • removeClass("className"):移除匹配元素的class属性中指定的类名。
//设置内联样式
        $("p").css("color", "red");
        $("p").css("font-size", "30px");
       
        //设置class属性的值
        $("p").addClass("abc");
        $("p").addClass("xyz");

        //移除指定的class
        $("p").removeClass("xyz");

        //获取指定样式值
        $("p").css("color"); //无参数则是返回style全部属性值
        //获取class属性的全部值
        $("p").attr("class")



jQuery并未提供删除指定样式方法,想让某个样式失效时,采用

$("selector").css("name", "")这种形式。

$("p").css("font-size", ""); //这时,这个样式属性就会被取消了。



当需要批量设置style样式时,可以传入一个json对象,json格式正好是key-value。

//设置内联样式
        $("p").css({
            color:"red",
            fontSize:"30px" //如果样式是横线连接,就采用驼峰写法。
        });