Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JQuery-查找任何级别的所有子体,但不查找这些子体的子体_Javascript_Jquery_Html_Dom - Fatal编程技术网

Javascript 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

问题:

我试图使用JQuery的
.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