`
ahopedog2
  • 浏览: 25182 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jQeury在不同的范围内查询DOM

阅读更多
    jQuery最简单的功能是在document中用标签名或标签ID查询dom元素,这也是许多人经常用到的方法。document就是当前页面的文档对象,document作为全局命名空间window的一个属性存在,通过window.document可以得到它的引用。默认情况下jQuery的查询是在当前文档内进行的。
而jQuery的查询功能还允许指定在其他的不同位置或范围进行查询。这是通过$()函数的第二个参数,即context指定的。

    jQuery(selector, [context])
    $(selector, [context])


上面是jQuery查询器函数的语法。context是可选参数。

jQuery的查询范围大致分为4种(context的取值类型),分别是当前文档(document)、一个或一些dom元素、iframe或frame内嵌的文档、从一个ajax请求返回的xml文档。

下面下文使用到的2个HTML示例文件(为了代码简短,去掉了head等标签)

basic.html
<body>
	<div id="outer1" name="outer" class="outer">
		<div class="inner">a</div>
		<div class="inner">b</div>
	</div>
	
	<div id="outer2" name="outer" class="outer">
		<div class="inner">c</div>		
	</div>
	
	<iframe id="frame1" src="basic-content.html"></iframe>
</body>

basic-content.html
<body>
	<div id="content-outer" class="content-outer">
		<div class="content-inner">a</div>		
	</div>
</body>



一、在当前文档中查询

var jqDiv = $('div');
console.log(jqDiv);  (1) 
	
jqDiv = $('div', document);
console.log(jqDiv);(2)
	
jqDiv = $('div', window.document);
console.log(jqDiv); (3)


输出:
(1) [div#outer1.outer,div.inner,div.inner,div#outer2.outer, div.inner]
(2) [div#outer1.outer,div.inner,div.inner,div#outer2.outer, div.inner]
(3) [div#outer1.outer,div.inner,div.inner,div#outer2.outer, div.inner]


本文开始已经提过这种查询方式,上面3个查询的输出完全是一样的。
(1) context被省略时,在当前页面的文档中查询。
(2) 明确指定document,可能有些多余。
(3) window.document是引用document的另外一种方式,因为document是window的一个属性。

二、在一个或一些dom元素的子节点中查询

2.1 context是一个dom元素
var domOuter = document.getElementById('outer1');	
var jqDiv2 = $('div', domOuter);
console.log(jqDiv2);


输出:[div.inner, div.inner]

context指定成一个dom元素(即id=outer1的div元素),jQuery在这个dom元素的子节点中进行查找,查询结果不包括上下文dom元素

2.2 context是多个dom元素时,在每个dom元素的子节点中查询
var domOuters = document.getElementsByName('outer');
var jqDiv3 = $('div', domOuters);
console.log(jqDiv3);


输出:[div.inner, div.inner, div.inner]

outer是2个外层DIV的name,document.getElementsByName()返回2个外层DIV的集合,context被指定成这个值,将在2个外层div里面进行查询,然后再将查询到的dom元素组合在一起,顺序与元素在html文档中出现的顺序相同


2.3 context是包装了dom元素的jQeury对象
var jqOuter = $('#outer1');
var jqDiv4 = $('div', jqOuter);
console.log(jqDiv4);


输出:[div.inner, div.inner]
context是jQuery对象,能实现2.1和2.2的功能。jQuery与dom节点具有等效的作用。

三、在iframe/frame内的document上查询
var jqFrame = $('iframe');		
var jqDiv1 = $('div', jqFrame[0].contentWindow.document);
console.log(jqDiv1);
		
//此处的作用于上面的相同
var domFrame1 = document.getElementById('frame1');
var div2 = domFrame1.contentWindow.document.getElementById('content-outer');
console.log(div2);


查询iframe中加载的网页时,context需要指定成iframe.contentWindow.document
contentWindow是iframe或frame所加载的页面的window对象,而contentWindow.document则是它的文档
如果context设置了无效的对象,会自动忽略context,然后在当前文档中继续查询

四、在ajax返回的xml文档中查询
$.ajax({
url:'/jsx/testcase/jquery/basic_data.xml',
	dataType: 'xml',
	success: function(ret){
		var jq = $('book', ret);
		console.log(jq)
	}
});

用$.ajax()向远程服务器发起对xml文件的请求,应注意dataType被指定成了xml类型,这样返回的结果才是一个 xml文档。之后的查询操作与在本地文档中的查询完全一样了。

分享到:
评论

相关推荐

    jQuery权威指南-源代码

    其次详细讲解了jQuery的各种选择器、jQuery操作DOM的方法、jQuery中的事件与应用、jQuery中的动画和特效、Ajax在jQuery中的应用,以及各种常用的jQuery插件的使用方法和技巧,所有这些知识点都配有完整的示例(包括...

    JQuery权威指南源代码

    在指定的查找范围内获取DOM元素 选择器中含有空格符与不含空格符的区别 事件中的target方法优化冒泡现象 使用data()方法在元素上存取移数据 使用data()方法在元素上存取移JSON格式的数据 解决jQuery库先于其他...

    超实用的jQuery代码段

    超实用的jQuery代码段精选近350个jQuery代码段,涵盖页面开发中绝大多数要点、技巧与方法,堪称史上最实用的jQuery代码参考书,可以视为网页设计与网站建设人员的好帮手。《超实用的jQuery代码段》的代码跨平台、跨...

    jQuery详细教程

    您也许已经注意到在我们的实例中的所有 jQuery 函数位于一个 document ready 函数中: $(document).ready(function(){ --- jQuery functions go here ---- }); 这是为了防止文档在完全加载(就绪)之前运行 jQuery...

    jQuery完全实例.rar

    如果指定了 context 参数,如一个 DOM 元素集或 jQuery 对象,那就会在这个 context 中查找。 参考 Selectors 获取更多用于 expression 参数的 CSS 语法的信息。 ----------------------------------------------...

    jQuery审计「jQuery Audit」-crx插件

    jQuery Audit在Elements面板中创建一个侧边栏,其中包含jQuery委托的事件,内部数据等,作为实时DOM节点,函数和对象。 查找委托事件及其处理程序。 变量的行为类似于“源”面板-“范围变量”侧栏中的对象。 您可以...

    no-jquery:从全局窗口对象中完全删除 jQuery

    将chai-jquery用于 DOM 断言很方便,但我的应用程序中不需要 jQuery,并且希望确保我使用的任何库都不会在全局范围内找到 jQuery,并尝试在测试执行期间使用它。 此外,如果我要在我的应用程序中使用 jQuery,我会...

    深入分析JQuery和JavaScript的异同

    目前只记录LZ能力范围内的,日后持续补充。 一、JQuery对象和DOM对象的相互转化(《锋利的JQuery》)  JQuery转化为DOM:  1、var jq = $(‘#selector’); var dom = jq[index];  2、var jq1 = $(‘#selector1′...

    [原创]基于Jquery的PANEL窗体插件

    6、可以把移动的窗体限制在父框架可见的范围内, 也可以让窗体超出父框架显示。 7、使用单个或少数几个窗体时,可分别定义单独的GooPanel类对象;当使用多个窗体时或者在随时可能增减窗体的情况下时,就可用到...

    jQuery Audit-crx插件

    jQuery Audit在Elements面板中创建一个侧边栏,其中包含jQuery委托的事件,内部数据等,作为实时DOM节点,函数和对象。 查找委托事件及其处理程序。 变量的行为类似于“源”面板-“范围变量”侧栏中的对象。 您可以...

    scoped-polyfill:用于HTML5中范围内样式的Vanilla JavaScript polyfill,如果您要使用jQuery,也可以与jQuery一起使用

    它通过在styleRules选择器文本前添加ID来综合提高styleRules的特殊性,从而覆盖(如果在范围内的&lt;style&gt;节点中定义的)从主HTML继承的样式。在以下方面进行了测试(并正在工作): IE 6、7、8、9(在所有...

    isOnScreen:简单的jQuery插件,用于确定元素是否在视口内

    它不会测试任何其他类型的“可见性”,例如CSS显示,不透明度,在dom中的存在等等-它仅考虑位置。 如果屏幕上至少可见1个像素,则当前版本返回true。 接受一个可选的回调参数,该参数传递了每个边缘上可见的像素...

    boom.js:用于构建DOM树的简单模块

    繁荣是荷兰人的树。 boom.js是一个用于... tak//ES6 :)import { boom , tak } from 'boom.js' 或仅包含boom.js / boom.min.js,即可在全球范围内使用boom和tak &lt; script src =" node_modules/dist/boom.min.js "

    no-js:一个简单的jQuery插件,解决你所有的js问题

    no-js 的优点在于它允许您使用 dom 元素在隔离的范围内处理 Js 问题。 如果 id 为 #slideshow 的元素中存在 Js 问题,您可以删除该 dom 元素及其子元素的所有 Js。 其他试图解决相同问题的插件并不像 no-js 那样...

    sizzle-pseudos:jQuery和Sizzle的很酷的自定义伪选择器的集合

    为了在使用这些伪指令中的任何一个时获得最佳性能,请首先使用本机选择器缩小集合范围,然后使用.filter(":pseudo()") 。 可用的伪 -选择具有共同祖先的元素。 -选择当前视口内的元素。 -查找具有与给定RegExp...

    家居网 网页期末大作业(JS + CSS + html)+设计报告

    如果购买后遇到功能上问题也可发私信给我,能力范围内帮你解决 网页文件(.html)至少5个,实现至少10个功能,每个网页至少体现1个功能,具体要求如下: (1)使用DOM和事件操作元素、属性和内容,改变外观和提高交互...

    jsmodule:一个简单的库,用于更好地构建 javascript 代码 wo 引入了大框架

    提供了一种将事件处理程序映射到方法的机制查看模块的所有事件映射的单一位置事件处理程序在适当的上下文中执行,“this”始终指的是对象而不是 DOM 如果可用,事件选择器的范围始终限定在容器 DOM 内发布/订阅的...

Global site tag (gtag.js) - Google Analytics