js进阶 11-19 jquery如何查找选择器的第一个父亲元素和第一个定位的父元素
一、总结
一句话总结:closest()方法获得匹配选择器的第一个祖先元素,从当前元素开始沿 DOM 树向上。offsetParent()获得用于定位的第一个父元素。
1、closest()和parents()的主要区别是什么?
1,前者从当前元素开始匹配寻找,后者从父元素开始匹配寻找;2,前者逐级向上查找,直到发现匹配的元素后就停止了,后者一直向上查找直到根元素,然后把这些元素放进一个临时集合中,再用给定的选择器表达式去过滤。
2、jquery中如何取出jquery对象中的dom对象?
get()方法,参数可有可无,有的话为索引
67 //通过get()方法来获取jQuery对象中封装的整个数组或数组的某个元素
68 // alert(arr.get()) 69 //alert(arr.get(1)) 70 //alert(arr.get().join('-')) 71 alert(arr.get().reverse())
3、map()方法是干什么的?
map() 把当前匹配集合中的每个元素传递给函数,返回值是 jQuery 封装的数组。
59 var arr=$('input').map(function(){ 60 return $(this).val() 61 }) 62 63 //alert(arr.length)
4、jquery中用什么表示定位?
offset
比如:offsetParent()获得用于定位的第一个父元素。即:返回父元素中第一个其position设为relative或者absolute的元素。此方法仅对可见元素有效。
77 $('#btn6').click(function(){ 78 $('span').offsetParent().css("border", "solid green 1px"); 79 })
二、jquery如何查找选择器的第一个父亲元素和第一个定位的父元素
1、相关知识
- add() 方法将元素添加到匹配元素的集合中。
- addBack()添加堆栈中元素集合到当前集合,一个选择性的过滤选择器。
- end() 结束当前链中最近的一次筛选操作,并将匹配元素集合返回到前一次的状态。
- map() 把当前匹配集合中的每个元素传递给函数,返回值是 jQuery 封装的数组。
- closest()方法获得匹配选择器的第一个祖先元素,从当前元素开始沿 DOM 树向上。 closest和parents的主要区别是:1,前者从当前元素开始匹配寻找,后者从父元素开始匹配寻找;2,前者逐级向上查找,直到发现匹配的元素后就停止了,后者一直向上查找直到根元素,然后把这些元素放进一个临时集合中,再用给定的选择器表达式去过滤。
- offsetParent()获得用于定位的第一个父元素。即:返回父元素中第一个其position设为relative或者absolute的元素。此方法仅对可见元素有效。
2、代码
1 <!DOCTYPE html>
2 <html lang="en">
3 <style>
4 </style>
5 <head>
6 <meta charset="UTF-8">
7 <title>演示文档</title>
8 <script type="text/javascript" src="jquery-3.1.1.min.js"></script>
9 <style>
10 li{
11 margin-top: 5px;width: 150px;
12 }
13 </style>
14 </style>
15 </head>
16 <body>
17 <div>
18 <p>段落1</p>
19 <p>段落2</p>
20 <p>段落3</p>
21 </div>
22 <ol style="position: relative;">
23 <li>列表项0</li>
24 <li>列表项1</li>
25 <li>列表项2</li>
26 <li class="red">列表项3</li>
27 <li>列表项4</li>
28 <li>列表项5
29 <ol>
30 <li>列表项1.1</li>
31 <li><span>列表项1.2</span></li>
32 </ol>
33 </li>
34 </ol>
35 <input id="btn1" type="button" value='add'>
36 <input id="btn2" type="button" value='addBack'>
37 <input id="btn3" type="button" value='end'>
38 <input id="btn4" type="button" value='map'>
39 <input id="btn5" type="button" value='closest'>
40 <input id="btn6" type="button" value='offsetParent'>
41 <script type="text/javascript">
42 $(function(){
43 $('#btn1').click(function(){
44 //这里的add()相当于和的意思
45 // $("p").css("color","red")
46 // $("li").css("color","red")
47 // $("p,li").css("color","red")
48 $("p").css("background","#ccc").add('li').css("color","red")
49 })
50 $('#btn2').click(function(){
51 $(".red").nextAll().addBack().css("background-color", "red");
52 })
53 $('#btn3').click(function(){
54 // $('li').filter(':even').css("background-color", "red");
55 // $('li').filter(':odd').css("background-color", "orange");
56 $('li').filter(':even').css("background-color", "red").end().filter(':odd').css("background-color", "orange");
57 })
58 $('#btn4').click(function(){
59 var arr=$('input').map(function(){
60 return $(this).val()
61 })
62
63 //alert(arr.length)
64 // var arr2=[1,2,3,'A','B','C']
65 // alert(arr)
66 //map()函数的返回值为jQuery类型
67 //通过get()方法来获取jQuery对象中封装的整个数组或数组的某个元素
68 // alert(arr.get())
69 //alert(arr.get(1))
70 //alert(arr.get().join('-'))
71 alert(arr.get().reverse())
72 })
73 $('#btn5').click(function(){
74 // $('span').parents('li').css("border", "solid green 1px");
75 $('span').closest('li').css("border", "solid green 1px");
76 })
77 $('#btn6').click(function(){
78 $('span').offsetParent().css("border", "solid green 1px");
79 })
80 })
81 </script>
82 </body>
83 </html>