为什么jQuery选择器("parent>child")会跳过子项
Why is the jQuery selector, ("parent > child"), skipping children?
我不明白为什么我的选择器会跳过子项。我很确定这是因为我没有完全理解("parent>child"(选择器,但我不知道除了问别人,我还能做些什么来更好地理解这一点。我一直在阅读jQuery文档,搜索谷歌和stackoverflow。我找到了有关选择器的信息,但似乎没有什么能回答我的问题。
请查看以下jsfiddle:
https://jsfiddle.net/49kboqze/
这是我的jQuery代码:
if($("div.thumbdiv").length) {
$("a.thumblink").each(function(index) {
var $href = $(this).attr("href");
var $title = $(this).attr("title");
var $alt = $(this).find($("img.thumbnail")).attr("alt");
$(this).parents("div.imggallery > div").css("outline", "solid red 1px");
});
}
当我运行以下代码时:
var parentEls = $(this).parents()
.map(function() {
return $(this).attr("class");
})
.get()
.join( ", " );
console.log( parentEls );
它返回元素的所有父类。因此,我100%确信,类为thumbdiv的div是它的直接父级,它的"祖父母"是类为imggallery的div。到目前为止,无论是在我的头脑中还是在实践中,一切似乎都有意义。这是我不得不举起双手的地方;thumbdiv有几个兄弟,其中一个就在它的正上方,这个div有一个mainimgdiv类。mainimgdiv也是imggallery的一个孩子,事实上,它是第一个孩子。所以我一辈子都不明白,当我到达父目录div.imggallery,然后从那一点使用选择器时,它为什么跳过它的第一个子目录,回到它的第二个子目录div.thumbdiv。这甚至不是$(this(的位置(这是.thumbdv的唯一子目录a.thumblink(。
我认为这可能与.each函数有关,所以我尝试在条件之外使用选择器,但它仍然以相同的方式执行。
我不知所措,似乎想不通。我在这里错过了什么?
非常感谢您抽出时间!
当你有这个:
$(this).parents("div.imggallery > div")
您所说的是"选择this
元素的所有祖先,这些祖先恰好也与选择器"div.imggallery > div"
匹配"。
您的mainimgdiv
div是,而不是您的锚点this
元素的祖先,因此它不包含在选择中。换句话说,不是您的选择器在"跳过"子项,而是您使用了.parents()
。
如果你的意图是通过DOM导航从点击的链接到mainimgdiv
,那么你可以这样做:
$(this).closest("div.imggallery").find(".mainimgdiv")
也就是说,使用.closest()
通过树向上导航到祖先imggallery
,然后从那里使用.find()
向下导航回mainimgdiv
元素。
简单地说,jQuery选择器是以CSS选择器为模型的。
$(".parent > .child")
以上将选择直系亲属子女,但不选择子女的子女。
看看这个演示:http://jsbin.com/duhadikiji/edit?html,js,输出
- 铬:“;未捕获的语法错误:意外的标记:"
- 可以设置“;文件名"发生错误时显示的内联脚本标记的
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- 检测电话窃听,即:<a href="电话:xxx">在UIWebview上
- 使用“+="操作人员
- //而不是在src=“”上使用http://"属性
- "未捕获的语法错误:意外的标记}"
- 可以<脚本类型=“;text/javascript”>window.location=“/"</
- "实例范围”;TypeScript类的getter/setter
- Javascript复选框函数:;缺少:在属性id之后"
- "“;变量未引用正确的对象
- "日期“;AJAX请求返回的类型值未定义
- 得到"TypeError:无法读取属性'filename'未定义的“;调用“npm start
- Soundcloud api"未捕获的类型错误:无法读取属性'uri'“未定义”;
- "工具提示"jQuery插件坏了
- "锻造;React中的表达式
- 图像可以从源<img src=""/>.TEXT可以在没有javascript的情况下从外部
- 如何提取“;href"最近列表项中的属性值
- 为什么“;window=window.parent"创建一个无限循环
- jQuery -还有比"parent().parent().parent()"更好的语法吗?