jquery 选择元素

迷南。 2022-05-28 13:52 396阅读 0赞

理解DOM

DOM(Document Object Model) , 它是JavaScript与网页之间的接口, 通俗来讲DOM就是提供给JavaScript来修改页面上的树型标签结构。

css选择符

以下代码为例子:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title></title>
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <!-- 引入JQuery bootstrap.js-->
  8. <script type="text/javascript" src="js/jquery-3.2.1.min.js" ></script>
  9. <style type="text/css"> .horizontal { float: left; list-style: none; margin: 10px; } .sub-level { background: #ccc; } </style>
  10. </head>
  11. <body>
  12. <ul id="selected-plays">
  13. <li>Comedies
  14. <ul>
  15. <li><a href="/asyoulikeit/">As You Like It</a></li>
  16. <li>All's Well That Ends Well</li>
  17. <li>A Midsummer Night's Dream</li>
  18. <li>Twelfth Night</li>
  19. </ul>
  20. </li>
  21. <li>Tragedies
  22. <ul>
  23. <li><a href="hamlet.pdf">Hamlet</a></li>
  24. <li>Macbeth</li>
  25. <li>Romeo and Juliet</li>
  26. </ul>
  27. </li>
  28. <li>Histories
  29. <ul>
  30. <li>Henry IV (<a href="mailto:henryiv@king.co.uk">email</a>)
  31. <ul>
  32. <li>Part I</li>
  33. <li>Part II</li>
  34. </ul>
  35. <li><a href="http://www.shakespeare.co.uk/henryv.htm">
  36. Henry V</a></li>
  37. <li>Richard II</li>
  38. </ul>
  39. </li>
  40. </ul>
  41. <script> $(document).ready(function(){ $('#selected-plays > li').addClass('horizontal'); $('#selected-plays li:not(.horizontal)').addClass('sub-level'); }); </script>
  42. </body>
  43. </html>

其中$(‘#selected-plays > li’).addClass(‘horizontal’); 选择id为selected-plays的标签 > li 表示其下面的子标签li, 则选择了3个li,将horizontal添加为class.

$(‘#selected-plays li:not(.horizontal)’) 表示选取idselected-plays 下的li没有.horizontal的标签, 他会深入进去找

属性选择器

匹配标签的属性, 我们可以通过标签的属性来选择想要的标签。

先新增3个a标签的样式

  1. a.black{ background: black; }
  2. a.blue{ background: blue; }
  3. a.yellow{ background: yellow; }

选择下面标签, 添加black
<a href="mailto:henryiv@king.co.uk">
如下就可以选择到, 属性选择的格式就是 $(‘标签名[属性名=”xxx”]’)
$('a[href="mailto:henryiv@king.co.uk"]').addClass('black');

假如页面上有多个以mailto开头的 href都要用到black属性, 这样一个个选择很麻烦, 但是属性选择器是支持正则匹配的。 如下^表示以mailto:开头

  1. $('a[href^="mailto:"]').addClass('black');

既然有^选择以mailto:开头的元素那么也有$选择以什么结尾的匹配规则, 如下选取所有以.pdf结尾的href属性标签.

  1. $('a[href$=".pdf"]').addClass('yellow');

还有一个*号, 表示通配符, 如下选择href以http开头并且是含有henryv.htm的a标签

  1. $('a[href^="http://"][href*="henryv.htm"]').addClass('blue');

自定义选择符

  • eq 按下标选择
    自定义选择符一般跟在一个CSS选择符后面。 可以通过选取的基础上再次选取。
    如下有两个span标签。
    1. sfef

    1. bbb

    通过span.horizontal选择这两个span, 在用:eq(1)定位到第二span。 这里只选择了一个结点

    $(‘span.horizontal:eq(1)’).addClass(‘spanSize’);

    表格隔行选取
  • odd 和 even
    上面的:eq可以自定义选择第几个, 还有:odd 和 :even很有用处。
    下面表格没有任何样式,很单调
  • Shakespeare’s Plays








    td>All’s Well that Ends Well




























    As You Like It Comedy
    Comedy 1601
    Hamlet Tragedy 1604
    Macbeth Tragedy 1606
    Romeo and Juliet Tragedy 1595
    Henry IV, Part I History 1596
    Henry V History 1599

    Shakespeare’s Sonnets














    The Fair Youth 1–126
    The Dark Lady 127–152
    The Rival Poet 78–86

    定义样式

    tr { background-color: #fff; }
    .alt { background-color: #ccc; }

    我们可以为每个奇数行添加一个alt类。

    $(‘tr:even’).addClass(‘alt’);

    tr:even虽然even是偶数的意思, 但是计算机语言中普遍都是从0开始计算的, 0是第一个,1是第二个。
    经过选择得到如下图:
    这里写图片描述

  • nth-child 从父元素开始计算
    可以发现有点瑕疵, 第二个表格从第二行开始了,导致这样的原因是$(‘tr:even’) 是在所有tr的数量基础上选择even。 解决办法是用nth-child() , 使它相对父元素来计算, 而不是整个tr
  • $(‘tr:nth-child(odd)’).addClass(‘alt’);

    这里的nth-child 是jquery唯一一个从1开始计算的选择符, 所以这里又换成了odd。

  • contains 根据内容选取
    再来看一个选择符, :contains() , 它可以根据标签的内容进行匹配, 比如要将含有文字Henry的td变色。
  • $(‘td:contains(Henry)’).addClass(‘alt’);

    DOM遍历方法

    filter方法

    当使用选择器选择了多个便签时, 可以用filter方法遍历DOM得到满足我们条件的标签。
    如下ul


    • list item 1

    • list item 2

    • list item 3

    • list item 4

    • list item 5

    • list item 6

    • list item 33

    选取了所有的li , 并隔行变色

    $(‘ul > li’).filter(‘:even()’).addClass(‘alt’);

    filter 还可以用一个函数作为参数

    $(‘ul > li’).filter(function(index){

    1. return index % 2 == 0;

    }).addClass(‘alt’);

    next() , nextAll()

    通过contains(3)选择包含内容为3的标签, 再用next() 函数可以选择内容为3的下一个兄弟标签, 如下。

    //两种写法都可以
    $(‘ul > li’).filter(‘:contains(3)’).next().addClass(‘alt’);
    $(‘ul > li:contains(3)’).next().addClass(‘alt’);

    nextAll() 则是选择内容为3的后面所有兄弟

    $(‘ul > li:contains(3)’).nextAll().addClass(‘alt’);

    有next当然也有prev了, prev() ,prevAll()和next用法是相同。

    还有个siblings()方法, 当选择内容为3的li后, 使用siblings()方法, 可以选取内容为3的其他所有兄弟,但内容为3的标签就丢弃了。

    $(‘ul > li:contains(3)’).siblings().addClass(‘alt’);

    addBack()

    上面提到的next, prev函数都是不包括内容为3的标签自身的, 加上addBack()则可以不把自身丢弃。 如下这样1, 2, 3都被选择了。

    $(‘ul > li:contains(3)’).prevAll().addBack().addClass(‘alt’);

    除了通过遍历得到兄弟结点, 还可以先找父亲然后在通过父亲找儿子,就是自己的兄弟了。如下选择的都是内容为3的兄弟和它自己:

    $(‘ul > li:contains(3)’).parent().children().addClass(‘alt’);

    访问DOM元素

    通过jquery选择得到的都是jQuery对象, 要想获取纯粹的DOM对象, 可以使用如下的两种方式

    $(‘#item1’).get(0)
    //或者更简便的
    $(‘#item1’)[0]

    jquery对象 和 DOM对象的区别

    这里有必要理解下jquery对象 和 DOM对象的区别,
    $('#item1') 得到的是一个jquery对象, 可以用$('#item1').html() 打印出内容。
    $('#item1')[0] 得到的是一个纯粹的DOM对象, 它是没有.html()方法的, .html()是jquery对象特有的方法, $('#item1')[0].innerHTML 才是DOM的方法。

    如下,结果是true,选择都是DOM对象是相等的。
    $('#item1')[0] == document.getElementById("item1");

    再来看看jquery和DOM对象如何转换。

    jQuery转成DOM可以通过get,或者[]方式。

    DOM对象转成jQuery对象如下, 用$() 包住就行。

    var item = document.getElementById(“item1”);
    item = $(item);

发表评论

表情:
评论列表 (有 0 条评论,396人围观)

还没有评论,来说两句吧...

相关阅读

    相关 jQuery元素选择器(element)

    一 介绍 元素选择器是根据元素名称匹配相应的元素。 通俗的讲元素选择器指向的是DOM元素的标记名,也就是说元素选择器是根据元素的标记名选择的。 可以把元素的标记名理解成学