Javascript JQuery-查找任何级别的所有子体,但不查找这些子体的子体
问题: 我试图使用JQuery的Javascript JQuery-查找任何级别的所有子体,但不查找这些子体的子体,javascript,jquery,html,dom,Javascript,Jquery,Html,Dom,问题: 我试图使用JQuery的.find()查找元素中任何级别的所有具有给定属性的子体,但不查找具有相同属性的子体的子体 $("#some_id").find("[some_attribute]"); 帮助理解: JQuery 下面查询的目标是查找元素$(“#some_id”)(在任何级别)中具有某些属性的所有子体,但不查找具有相同属性的子体的子体 $("#some_id").find("[some_attribute]"); HTML <span id="some_id" some
.find()
查找元素中任何级别的所有具有给定属性的子体,但不查找具有相同属性的子体的子体
$("#some_id").find("[some_attribute]");
帮助理解:
JQuery
下面查询的目标是查找元素$(“#some_id”)
(在任何级别)中具有某些属性的所有子体,但不查找具有相同属性的子体的子体
$("#some_id").find("[some_attribute]");
HTML
<span id="some_id" some_attribute>
<span some_attribute> <!-- SELECT -->
<span some_attribute> <!-- IGNORE -->
<span some_attribute> <!-- IGNORE -->
</span>
</span>
<span>
</span>
</span>
<span>
<span some_attribute> <!-- SELECT -->
<span>
<span some_attribute> <!-- IGNORE -->
</span>
</span>
<span some_attribute> <!-- IGNORE -->
</span>
</span>
</span>
<span>
<span>
<span>
<span some_attribute> <!-- SELECT -->
</span>
</span>
</span>
</span>
</span>
注意:我需要一个通用的方法。。。我解释得更好!假设我不知道选择器$(“#some_id”)
我只有该查询的结果。也可以认为,这个结果可能是一个元素,它可能在另一个元素中,使用<代码>某个属性属性。 可以使用<代码>:不< /COD>来确保所选元素不匹配一个特定的选择器。(因为与该选择器匹配的元素将是嵌套在另一个非#some_id
的some_属性中的some_属性
):
$("#some_id").find("[some_attribute]");
const result=$(“#一些_id”)
.find(“[some_attribute]:not(#some_id[some_attribute][some_attribute]))
.each(函数({
log(this.innerHTML);
});
选择
选择
选择
这是我的解决方案。有关更多说明,请参阅下面的代码注释
// NOTE: Find all descendants at any level, but not the descendants of those descendants.
// By Questor
function findDescsNotDescsOfThose(jqPntElOrPntQry, jqFind){
var jqElInst;
if (typeof jqPntElOrPntQry === "string" ||
jqPntElOrPntQry instanceof String) {
// [Ref.: https://stackoverflow.com/a/9436948/3223785 ]
jqElInst = $(jqPntElOrPntQry);
} else {
jqElInst = jqPntElOrPntQry;
}
return jqElInst.find(jqFind)
.filter(function(){
// NOTE: We need use ".parent ()" and then ".closest ()", otherwise ".closest ()"
// will find the element itself if it fits "jqFind". By Questor
descOfjqFind = $(this).parent().closest(jqFind);
// NOTE: Checks if it is not descended from any element that also fits
// in "jqFind". Being descended from an element that also fits "jqFind"
// checks to see if this element is descended from "jqElInst". By Questor
if (descOfjqFind.length > 0 && $(descOfjqFind).
parent().closest(jqElInst).length === 1) {
return false
}
return true;
});
}
谢谢!=D我需要一个更通用的方法。如果我不知道选择器$(“#某些id”),我会解释得更好< /代码>我只知道那个查询的结果。也可以认为这个结果可以引用一个元素,它可能在另一个元素中,包含<代码>某个属性< /COD>属性。谢谢!
在已经遇到的元素中进行搜索。=d这里有一个非常类似的问题。op在这里给出了答案。但是,这似乎不是一个好的解决方案…=/See edits。您也可以在较旧版本的jQuery中使用.selector
,但它不再受支持(从1.9开始)我正在测试并试图理解为什么在我的实际情况下它不起作用。我会给你反馈!=DSo你想要有属性的后代,只要它们不是具有相同属性的其他元素的直接后代?@Taplar是的!正是!=D