开心每一天
 
昨日:篇  今日:篇   总帖:篇   会员:
今日:0    总帖:3
xyb
785
xyb
在传统的 JavaScript 开发中,查找 DOM 往往是开发人员遇到的第一个头疼的问题,原生的 JavaScript 所提供的 DOM 选择方法并不多,仅仅局限于通过 tag, name, id 等方式来查找,这显然是远远不够的,如果想要进行更为精确的选择不得不使用看起来非常繁琐的正则表达式,或者使用某个库。事实上,现在所有的浏览器厂商都提供了 querySelector 和 querySelectorAll 这两个方法的支持,甚至就连微软也派出了 IE 8 作为支持这一特性的代表,querySelector 和 querySelectorAll 作为查找 DOM 的又一途径,极大地方便了开发者,使用它们,你可以像使用 CSS 选择器一样快速地查找到你需要的节点。querySelectorquerySelector 和 querySelectorAll 的使用非常的简单,就像标题说到的一样,它和 CSS 的写法完全一样,对于前端开发人员来说,这是难度几乎为零的一次学习。假如我们有一个 id 为 test 的 DIV,为了获取到这个元素,你也许会像下面这样:document.getElementById("test");1现在我们来试试使用新方法来获取这个 DIV:document.querySelector("#test"); document.querySelectorAll("#test")[0];12获取文档中 class=”example” 的第一个 <p> 元素:document.querySelector("p.example");1获取文档中有 “target” 属性的第一个 <a> 元素:document.querySelector("a[target]");1假定你选择了两个选择器: <h2> 和 <h3> 元素。 以下代码将为文档的第一个 <h2> 元素添加背景颜色:<h2>A h2 element</h2> <h3>A h3 element</h3> document.querySelector("h2, h3").style.backgroundColor = "red";//返回h2或者h3的首个元素1234但是,如果文档中 <h3> 元素位于 <h2> 元素之前,<h3> 元素将会被设置指定的背景颜色。<h3>A h3 element</h3> <h2>A h2 element</h2> document.querySelector("h2, h3").style.backgroundColor = "red";1234使用这两个方法无法查找带伪类状态的元素,比如querySelector(':hover')不会得到预期结果。querySelectorAll该方法返回所有满足条件的元素,结果是个nodeList集合。查找规则与前面所述一样。elements = document.querySelectorAll('div.foo');//返回所有带foo类样式的div1但需要注意的是返回的nodeList集合中的元素是非实时(no-live)的,想要区别什么是实时非实时的返回结果,请看下例:<div id="container"> <div></div> <div></div> </div> //首先选取页面中id为container的元素 container=document.getElementById('#container'); console.log(container.childNodes.length)//结果为2 //然后通过代码为其添加一个子元素 container.appendChild(document.createElement('div')); //这个元素不但添加到页面了,这里的变量container也自动更新了 console.log(container.childNodes.length)//结果为31234567891011通过上面的例子就很好地理解了什么是会实时更新的元素。document.getElementById返回的便是实时结果,上面对其添加一个子元素后,再次获取所有子元素个数,已经由原来的2个更新为3个(这里不考虑有些浏览器比如Chrome会把空白也解析为一个子节点)。感觉区别不大是吧,但如果是稍微复杂点的情况,原始的方法将变得非常麻烦,这时候 querySelector 和 querySelectorAll 的优势就发挥出来了。比如接下来这个例子,我们将在 document 中选取 class 为 test 的 div 的子元素 p 的第一个子元素,当然这很拗口,但是用本文的新方法来选择这个元素,比用言语来描述它还要简单。document.querySelector("div.test>p:first-child"); document.querySelectorAll("div.test>p:first-child")[0];12我们使用 querySelectorAll 给所有 class 为 emphasis 的元素加粗显示。var emphasisText = document.querySelectorAll(".emphasis"); for( var i = 0 , j = emphasisText.length ; i < j ; i++ ){ emphasisText[i].style.fontWeight = "bold"; }1234这是原生方法,比起jquery速度快
16 0 934天前
问星
871
习惯   
        乞丐到小王家乞讨,他给十块,第二天乞丐又去,又给十块,持续两年。        一天只给五块,乞丐:以前给十块,怎么现在给五块?小王:我结婚了。乞丐一巴掌打过去:妈的,你竟拿我的钱去养你老婆?        启示:当提供免费服务让客户成为一种习惯,这种服务就不再是优势,而是劣势。
17 0 1297天前
xinchen
1004
[Image]
17 1 1298天前
快速发帖 高级模式
联系站长
您的IP:18.215.33.158,2020-10-30 13:24:49,Processed in 0.0327 second(s).
免责声明: 本网不承担任何由内容提供商提供的信息所引起的争议和法律责任。
Powered by HadSky 7.4.6