- 浏览: 1645147 次
- 性别:
文章分类
- 全部博客 (2929)
- 非技术 (18)
- Eclipse (11)
- JAVA (31)
- 正则表达式 (0)
- J2EE (4)
- DOS命令 (2)
- WEB前端 (52)
- JavaScript (69)
- 数据库 (8)
- 设计模式 (0)
- JFreechart (1)
- 操作系统 (1)
- 互联网 (10)
- EasyMock (1)
- jQuery (5)
- Struts2 (12)
- Spring (24)
- 浏览器 (16)
- OGNL (1)
- WebService (12)
- OSGi (14)
- 软件 (10)
- Tomcat (2)
- Ext (3)
- SiteMesh (2)
- 开源软件 (2)
- Hibernate (2)
- Quartz (6)
- iBatis (2)
最新评论
Tutorial:DomQuery Basics(DomQuery的基础)
DomQuery基础
DomQuery的select函数有两个参数。第一个是选择符字符(selector string )而第二个是欲生成查询的标签ID(TAG ID)。本文中我准备使用函数“Ext.query”但读者须谨记它是“Ext.DomQuery.select()”的简写方式。
这是要入手的html:
- <html>
- <head>
- <scripttype="text/javascript"src="../js/firebug/firebug.js"></script>
- </head>
- <body>
- <scripttype="text/javascript"src="../ext/ext-base.js"></script>
- <scripttype="text/javascript"src="../ext/ext-core.js"></script>
- <divid="bar"class="foo">
- I'madiv==>myid:bar,myclass:foo
- <spanclass="bar">I'maspanwithinthedivwithafooclass</span>
- <ahref="http://www.extjs.com"target="_blank">AnExtJslink</a>
- </div>
- <divid="foo"class="bar">
- myid:foo,myclass:bar
- <p>I'maPtagwithinthefoodiv</p>
- <spanclass="bar">I'maspanwithinthedivwithabarclass</span>
- <ahref="#">Aninternallink</a>
- </div>
- </body>
- </hmlt>
<html> <head> <script type="text/javascript" src="../js/firebug/firebug.js"></script> </head> <body> <script type="text/javascript" src="../ext/ext-base.js"></script> <script type="text/javascript" src="../ext/ext-core.js"></script> <div id="bar" class="foo"> I'm a div ==> my id: bar, my class: foo <span class="bar">I'm a span within the div with a foo class</span> <a href="http://www.extjs.com" target="_blank">An ExtJs link</a> </div> <div id="foo" class="bar"> my id: foo, my class: bar <p>I'm a P tag within the foo div</p> <span class="bar">I'm a span within the div with a bar class</span> <a href="#">An internal link</a> </div> </body> </hmlt>
第一部分:元素选择符Selector
假设我想获取文档内所有的“span”标签:
- //这个查询会返回有两个元素的数组因为查询选中对整个文档的所有span标签。
- Ext.query("span");
- //这个查询会返回有一个元素的数组因为查询顾及到了foo这个id。
- Ext.query("span","foo");注意刚才怎么传入一个普通的字符串作为第一个参数。
- 按id获取标签,你需要加上“#”的前缀:
- //这个查询会返回包含我们foodiv一个元素的数组!
- Ext.query("#foo");按classname获取标签,你需要加上“.”的前缀:
- /*这个查询会返回有一个元素的数组,
- 包含与之前例子一样的div但是我们使用了classname来获取*/
- Ext.query(".foo");你也可以使用关键字“*”来获取所有的元素:
- //这会返回一个数组,包含文档的所有元素。
- Ext.query("*");要获取子标签,我们只须在两个选择符之间插入一个空格:
- //这会返回有一个元素的数组,包含p标签的div标签
- Ext.query("divp");
- //这会返回有两个元素的数组,包含span标签的div标签
- Ext.query("divspan");
// 这个查询会返回有两个元素的数组因为查询选中对整个文档的所有span标签。 Ext.query("span"); // 这个查询会返回有一个元素的数组因为查询顾及到了foo这个id。 Ext.query("span", "foo");注意刚才怎么传入一个普通的字符串作为第一个参数。 按id获取标签,你需要加上“#”的前缀: // 这个查询会返回包含我们foo div一个元素的数组! Ext.query("#foo");按class name获取标签,你需要加上“.”的前缀: /*这个查询会返回有一个元素的数组, 包含与之前例子一样的div但是我们使用了class name来获取*/ Ext.query(".foo");你也可以使用关键字“*”来获取所有的元素: // 这会返回一个数组,包含文档的所有元素。 Ext.query("*");要获取子标签,我们只须在两个选择符之间插入一个空格: // 这会返回有一个元素的数组,包含p标签的div标签 Ext.query("div p"); // 这会返回有两个元素的数组,包含span标签的div标签 Ext.query("div span");
还有三个的元素选择符,待后续的教程会叙述。 ""
如果朋友你觉得这里说得太简单的话,你可以选择到DomQuery 文档看看,可能会有不少收获:)
第二部分:属性选择符Attributes selectors
这些选择符可让你得到基于一些属性值的元素。属性指的是html元素中的href, id 或 class。
- //我们检查出任何存在有class属性的元素。
- //这个查询会返回5个元素的数组。
- Ext.query("*[class]");
- //结果:[body#ext-gen2.ext-gecko,div#bar.foo,span.bar,div#foo.bar,span.bar]
- //现在我们针对特定的class属性进行搜索。
- //这会得到class等于“bar”的所有元素
- Ext.query("*[class=bar]");
- //这会得到class不等于“bar”的所有元素
- Ext.query("*[class!=bar]");
- //这会得到class从“b”字头开始的所有元素
- Ext.query("*[class^=b]");
- //这会得到class由“r”结尾的所有元素
- Ext.query("*[class$=r]");
- //这会得到在class中抽出“a”字符的所有元素
- Ext.query("*[class*=a]");
// 我们检查出任何存在有class属性的元素。 // 这个查询会返回5个元素的数组。 Ext.query("*[class]"); // 结果: [body#ext-gen2.ext-gecko, div#bar.foo, span.bar, div#foo.bar, span.bar] //现在我们针对特定的class属性进行搜索。 // 这会得到class等于“bar”的所有元素 Ext.query("*[class=bar]"); // 这会得到class不等于“bar”的所有元素 Ext.query("*[class!=bar]"); // 这会得到class从“b”字头开始的所有元素 Ext.query("*[class^=b]"); //这会得到class由“r”结尾的所有元素 Ext.query("*[class$=r]"); //这会得到在class中抽出“a”字符的所有元素 Ext.query("*[class*=a]");
第三部分: CSS值元素选择符
这些选择符会匹配DOM元素的style属性。尝试在那份html中加上一些颜色:
- <html>
- <head>
- <scripttype="text/javascript"src="../js/firebug/firebug.js"></script>
- </head>
- <body>
- <scripttype="text/javascript"src="../ext/ext-base.js"></script>
- <scripttype="text/javascript"src="../ext/ext-core.js"></script>
- <divid="bar"class="foo"style="color:red;">
- 我是一个div==>我的id是:bar,我的class:foo
- <spanclass="bar"style="color:pink;">
- I'maspanwithinthedivwithafooclass</span>
- <ahref="http://www.extjs.com"target="_blank"style="color:yellow;">
- AnExtJslinkwithablanktarget!</a>
- </div>
- <divid="foo"class="bar"style="color:fushia;">
- myid:foo,myclass:bar
- <p>I'maPtagwithinthefoodiv</p>
- <spanclass="bar"style="color:brown;">
- I'maspanwithinthedivwithabarclass</span>
- <ahref="#"style="color:green;">Aninternallink</a>
- </div>
- </body>
- </html>
<html> <head> <script type="text/javascript" src="../js/firebug/firebug.js"></script> </head> <body> <script type="text/javascript" src="../ext/ext-base.js"></script> <script type="text/javascript" src="../ext/ext-core.js"></script> <div id="bar" class="foo" style="color:red;"> 我是一个div ==> 我的id是: bar, 我的class: foo <span class="bar" style="color:pink;"> I'm a span within the div with a foo class</span> <a href="http://www.extjs.com" target="_blank" style="color:yellow;"> An ExtJs link with a blank target!</a> </div> <div id="foo" class="bar" style="color:fushia;"> my id: foo, my class: bar <p>I'm a P tag within the foo div</p> <span class="bar" style="color:brown;"> I'm a span within the div with a bar class</span> <a href="#" style="color:green;">An internal link</a> </div> </body> </html>
基于这个CSS的颜色值我们不会作任何查询,但可以是其它的内容。它的格式规定是这样的:
元素{属性 操作符 值}
注意我在这里是怎么插入一个不同的括号。
所以,操作符(operators)和属性选择符(attribute selectors)是一样的。
- //获取所以红色的元素
- Ext.query("*{color=red}");//[div#bar.foo]
- //获取所有粉红颜色的并且是有红色子元素的元素
- Ext.query("*{color=red}*{color=pink}");//[span.bar]
- //获取所有不是红色文字的元素
- Ext.query("*{color!=red}");
- //[html,head,scriptfirebug.js,link,body#ext-gen2.ext-gecko,
- //scriptext-base.js,scriptext-core.js,span.bar,
- //div#foo.bar,p,span.bar,atest.html#]
- //获取所有颜色属性是从“yel”开始的元素
- Ext.query("*{color^=yel}");
- //获取所有颜色属性是以“ow”结束的元素
- Ext.query("*{color$=ow}");
- //获取所有颜色属性包含“ow”字符的元素
- Ext.query("*{color*=ow}");
// 获取所以红色的元素 Ext.query("*{color=red}"); // [div#bar.foo] // 获取所有粉红颜色的并且是有红色子元素的元素 Ext.query("*{color=red} *{color=pink}"); // [span.bar] // 获取所有不是红色文字的元素 Ext.query("*{color!=red}"); // [html, head, script firebug.js, link, body#ext-gen2.ext-gecko, //script ext-base.js, script ext-core.js, span.bar, //div#foo.bar, p, span.bar, a test.html#] // 获取所有颜色属性是从“yel”开始的元素 Ext.query("*{color^=yel}"); // 获取所有颜色属性是以“ow”结束的元素 Ext.query("*{color$=ow}"); // 获取所有颜色属性包含“ow”字符的元素 Ext.query("*{color*=ow}");
第四部分:伪类选择符Pseudo Classes selectors
仍然是刚才的网页,但是有所不同的只是新加上了一个UL元素、一个TABLE元素和一个FORM元素,以便我们可以使用不同的伪类选择符,来获取节点。
- <html>
- <head>
- <scripttype="text/javascript"src="../js/firebug/firebug.js"></script>
- </head>
- <body>
- <scripttype="text/javascript"src="../ext/ext-base.js"></script>
- <scripttype="text/javascript"src="../ext/ext-core.js"></script>
- <divid="bar"class="foo"style="color:red;
- border:2pxdottedred;margin:5px;padding:5px;">
- I'madiv==>myid:bar,myclass:foo
- <spanclass="bar"style="color:pink;">
- I'maspanwithinthedivwithafooclass</span>
- <ahref="http://www.extjs.com"target="_blank"style="color:yellow;">
- AnExtJslinkwithablanktarget!</a>
- </div>
- <divid="foo"class="bar"style="color:fushia;
- border:2pxdottedblack;margin:5px;padding:5px;">
- myid:foo,myclass:bar
- <p>I'maPtagwithinthefoodiv</p>
- <spanclass="bar"style="color:brown;">
- I'maspanwithinthedivwithabarclass</span>
- <ahref="#"style="color:green;">Aninternallink</a>
- </div>
- <divstyle="border:2pxdottedpink;margin:5px;padding:5px;">
- <ul>
- <li>Somechoice#1</li>
- <li>Somechoice#2</li>
- <li>Somechoice#3</li>
- <li>Somechoice#4witha<ahref="#">link</a></li>
- </ul>
- <tablestyle="border:1pxdottedblack;">
- <trstyle="color:pink">
- <td>1strow,1stcolumn</td>
- <td>1strow,2ndcolumn</td>
- </tr>
- <trstyle="color:brown">
- <tdcolspan="2">2ndrow,colspanned!</td>
- </tr>
- <tr>
- <td>3rdrow,1stcolumn</td>
- <td>3rdrow,2ndcolumn</td>
- </tr>
- </table>
- </div>
- <divstyle="border:2pxdottedred;margin:5px;padding:5px;">
- <form>
- <inputid="chked"type="checkbox"checked/>
- <labelfor="chked">I'mchecked</label>
- <br/><br/>
- <inputid="notChked"type="checkbox"/><labelfor="notChked">
- notmebrotha!</label>
- </form>
- </div>
- </body>
- </html>
<html> <head> <script type="text/javascript" src="../js/firebug/firebug.js"></script> </head> <body> <script type="text/javascript" src="../ext/ext-base.js"></script> <script type="text/javascript" src="../ext/ext-core.js"></script> <div id="bar" class="foo" style="color:red; border: 2px dotted red; margin:5px; padding:5px;"> I'm a div ==> my id: bar, my class: foo <span class="bar" style="color:pink;"> I'm a span within the div with a foo class</span> <a href="http://www.extjs.com" target="_blank" style="color:yellow;"> An ExtJs link with a blank target!</a> </div> <div id="foo" class="bar" style="color:fushia; border: 2px dotted black; margin:5px; padding:5px;"> my id: foo, my class: bar <p>I'm a P tag within the foo div</p> <span class="bar" style="color:brown;"> I'm a span within the div with a bar class</span> <a href="#" style="color:green;">An internal link</a> </div> <div style="border:2px dotted pink; margin:5px; padding:5px;"> <ul> <li>Some choice #1</li> <li>Some choice #2</li> <li>Some choice #3</li> <li>Some choice #4 with a <a href="#">link</a></li> </ul> <table style="border:1px dotted black;"> <tr style="color:pink"> <td>1st row, 1st column</td> <td>1st row, 2nd column</td> </tr> <tr style="color:brown"> <td colspan="2">2nd row, colspanned! </td> </tr> <tr> <td>3rd row, 1st column</td> <td>3rd row, 2nd column</td> </tr> </table> </div> <div style="border:2px dotted red; margin:5px; padding:5px;"> <form> <input id="chked" type="checkbox" checked/> <label for="chked">I'm checked</label> <br /><br /> <input id="notChked" type="checkbox" /><label for="notChked"> not me brotha!</label> </form> </div> </body> </html>
off we go:
- /*
- thisonegivesusthefirstSPANchildofitsparent
- */
- Ext.query("span:first-child");//[span.bar]
- /*
- thisonegivesusthelastAchildofitsparent
- */
- Ext.query("a:last-child")//[a,atest.html#]
- /*
- thisonegivesusthesecondSPANchildofitsparent
- */
- Ext.query("span:nth-child(2)")//[span.bar]
- /*
- thisonegivesusODDTRofitsparents
- */
- Ext.query("tr:nth-child(odd)")//[tr,tr]
- /*
- thisonegivesusevenLIofitsparents
- */
- Ext.query("li:nth-child(even)")//[li,li]
- /*
- thisonegivesusAthataretheonlychildofitsparents
- */
- Ext.query("a:only-child")//[atest.html#]
- /*
- thisonegivesusthecheckedINPUT
- */
- Ext.query("input:checked")//[input#chkedon]
- /*
- thisonegivesusthefirstTR
- */
- Ext.query("tr:first")//[tr]
- /*
- thisonegivesusthelastINPUT
- */
- Ext.query("input:last")//[input#notChkedon]
- /*
- thisonegivesusthe2ndTD
- */
- Ext.query("td:nth(2)")//[td]
- /*
- thisonegivesuseveryDIVthathasthe"within"string
- */
- Ext.query("div:contains(within)")//[div#bar.foo,div#foo.bar]
- /*
- thisonegivesuseveryDIVthatdoesn'thaveaFORMchild
- */
- Ext.query("div:not(form)")[div#bar.foo,div#foo.bar,div]
- /*
- ThisonegivesuseeveryDIVthathasanAchild
- */
- Ext.query("div:has(a)")//[div#bar.foo,div#foo.bar,div]
- /*
- thisonegivesuseveryTDthatisfollowedbyanotherTD.
- obviously,theonethathasacolspanpropertyisignored.
- */
- Ext.query("td:next(td)")//[td,td]
- /*
- thisonegivesuseveryLABELthatisprecededbyanINPUT
- */
- Ext.query("label:prev(input)")//[label,label]
/* this one gives us the first SPAN child of its parent */ Ext.query("span:first-child"); // [span.bar] /* this one gives us the last A child of its parent */ Ext.query("a:last-child") // [a, a test.html#] /* this one gives us the second SPAN child of its parent */ Ext.query("span:nth-child(2)") // [span.bar] /* this one gives us ODD TR of its parents */ Ext.query("tr:nth-child(odd)") // [tr, tr] /* this one gives us even LI of its parents */ Ext.query("li:nth-child(even)") // [li, li] /* this one gives us A that are the only child of its parents */ Ext.query("a:only-child") // [a test.html#] /* this one gives us the checked INPUT */ Ext.query("input:checked") // [input#chked on] /* this one gives us the first TR */ Ext.query("tr:first") // [tr] /* this one gives us the last INPUT */ Ext.query("input:last") // [input#notChked on] /* this one gives us the 2nd TD */ Ext.query("td:nth(2)") // [td] /* this one gives us every DIV that has the "within" string */ Ext.query("div:contains(within)") // [div#bar.foo, div#foo.bar] /* this one gives us every DIV that doesn't have a FORM child */ Ext.query("div:not(form)") [div#bar.foo, div#foo.bar, div] /* This one gives use every DIV that has an A child */ Ext.query("div:has(a)") // [div#bar.foo, div#foo.bar, div] /* this one gives us every TD that is followed by another TD. obviously, the one that has a colspan property is ignored. */ Ext.query("td:next(td)") // [td, td] /* this one gives us every LABEL that is preceded by an INPUT */ Ext.query("label:prev(input)") //[label, label]
总结
API依然最重要的资讯来源。本篇教程做的仅仅是拿一张现实中的网页示范了一些结果。
如读者已了解过API的DomQuery内容,可跳过本文,直接阅读 DomQuery advanced tutorial!
译者姓名:Frank
译者博客:http://www.ajaxjs.com/blog/
相关推荐
graph slam tutorial :从推导到应用3(g2o版程序),包含文档读取,及后端优化
《Java EE 6 Tutorial: Basic Concepts, Fourth Edition》是一本面向新手及中级Java开发者的指南书籍,旨在帮助他们深入理解Java平台企业版6(Java EE 6)的各项特性与技术。本书由Oracle公司Java EE 6文档团队成员...
本教程“40057GC11 - Introduction to Oracle9i:SQL Basics Tutorial”旨在为初学者提供SQL基础教程,帮助他们理解并掌握在Oracle9i环境下进行数据管理的基本概念和技能。 SQL(Structured Query Language)是用于...
**OpenCV 指南:学习 OpenCV 的...综上所述,"opencv-tutorial"这个压缩包文件很可能包含了关于OpenCV的基础教程和实践案例,通过学习和实践,你将能够熟练掌握OpenCV的核心功能,为你的计算机视觉项目打下坚实基础。
本书教您如何使用Ruby on Rails开发和部署真正的,具有工业实力的Web应用程序,Ruby on Rails是为诸如Twitter,Hulu,GitHub和Yellow Pages等顶级网站提供支持的开源Web框架。
Tutorial 1: Setting up DirectX 11 with Visual Studio Tutorial 2: Creating a Framework and Window Tutorial 3: Initializing DirectX 11 Tutorial 4: Buffers, Shaders, and HLSL Tutorial 5: ...
NIPS 2016 Tutorial: Generative Adversarial Networks(生成对抗网络) , by Ian Goodfellow
《EDEM教程1 - 传送带》是一份官方的学习资料,专为仿真爱好者设计,旨在帮助他们理解和掌握EDEM软件的使用。EDEM(Eulerian Discrete Element Method)是一种基于离散元方法的颗粒流体动力学软件,广泛应用于各种...
XDP-Tutorial 旨在帮助开发者和网络工程师学习并掌握eXpress Data Path(简称XDP),这是一种由Linux内核提供的高效、低延迟的数据包处理框架。该项目通过一系列教程和示例代码,引导用户深入了解XDP的原理与实践...
This Book has been prepared for ...Title: Objective C Tutorial: Simply Easy Learning Author: Virender Singh Length: 309 pages Edition: 1 Language: English Publication Date: 2015-07-05 ISBN-10: B0112YNTDC
github-basics-tutorial:如何使用github和github的基础教程
In this tutorial, we aim to present to researchers and industry practitioners a broad overview of imitation learning techniques and recent applications. Imitation learning is a powerful and practical ...
http://msdn.microsoft.com/en-us/library/ms734766(v=VS.90).aspx MSDN的例子,不过照着步骤一步步做来没能成功,少了各 Activity的 MethodInvoking , newstatus, orderid 的设置,存一下修改后成功的例子。
NVIDIA Vulkan Ray跟踪教程基于KHR的较新的教程版本本教程有一个基于VK_KHR_ray_tracing扩展的较新版本。 GitHub: : 该项目和所提供的代码的重点是展示使用扩展在现有Vulkan样本中进行光线跟踪的基本集成。...
• Overview of proposed p802.3bv project • Technical / Economic Feasibility • Home networking market • Automo>ve market • Industrial market • Support • Summary and ques>ons
docker-tutorial::spouting_whale:Docker入门学习笔记
JavaScript ES6中的基础知识-有趣而清晰的介绍 出于以下原因,请使用此资源! 查找每个编码讲座的指南。 发现编码挑战和测验的答案。 在webpack中为es6构建一个入门项目。 享受本课程,并继续编码! 链接到原始...
带注释的代码,用于理解算法。 Simulation:将所有候选对象绘制成搜索空间上的移动散点图。 Performance:最差、中值和最佳解决方案与经过的迭代次数的关系图。 Final Answer:运行已收敛的全局最小值。