Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/69.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中具有display:none的父div获取ID_Javascript_Html_Css_Parent - Fatal编程技术网

从JavaScript中具有display:none的父div获取ID

从JavaScript中具有display:none的父div获取ID,javascript,html,css,parent,Javascript,Html,Css,Parent,我想获取特定元素的父元素的id。父元素使用display:none隐藏,因为我需要它不获取空间 我编写了一个Javascript,它根据parents类从元素的父级获取id function getParentDivId(divName, classNameParent) { do { divName = divName.parentNode; // get parentdiv from initial div if (divName.className

我想获取特定元素的父元素的id。父元素使用display:none隐藏,因为我需要它不获取空间

我编写了一个Javascript,它根据parents类从元素的父级获取id

function getParentDivId(divName, classNameParent) {
    do {
        divName = divName.parentNode; // get parentdiv from initial div
        if (divName.className == classNameParent) { // check if parent div belongs to specified class
            return divName.id; // return the id of the parent div
        }
    } while (divName.parentNode) { // while div has parent do above function
        return null;
    }
}
这是HTML代码

<div class="row" id="row1">
    <!-- code for a single main category with several subcategories -->
    <!-- all subcategories can be hidden by setting the subcategories display property to none-->
    <!-- all subcategories can be shown by setting the categories display property to inline-block-->
    <div class="categories" id="calgemeen">
        <div class="item" id="algemeen">algemeen
            <div class="press" onclick="goSubcategory(this, contact);"></div>
        </div>
    </div>
    <div class="subcategories" id="scalgemeen">
        <!--subcategories can be shown using item, note the weird -->
        <!--syntax ><div this is necessary to remove the whitespace between inline-blocks-->
        <div class="subcategory" id="info"><div class="item">info</div></div
        ><div class="subcategory" id="contact"><div class="item">contact
            <div class="press" onclick="goSubcategory(this, spaans);"></div></div></div
        ><div class="subcategory" id="route"><div class="item">route</div></div>
    </div>
</div>
<div class="row" id="row2">
    <div class="categories" id="chuisartsen">
        <div class="item">huisartsen
        </div>
    </div>
    <div class="subcategories" id="schuisartsen">
        <div class="subcategory" id="spaans"><div class="item">spaans</div></div
                ><div class="subcategory" id="engels"><div class="item">stelten</div></div
            ><div class="subcategory" id="frans"><div class="item">willemsen</div></div>
    </div>
</div>
这是正确的,因为“This”在子类别和类中没有父级 “联系人”在子类别类中确实有一个父级,id='scalgeen'

但是,onclick=“goSubcategory(这是spaans)会在控制台中返回

current: scalgemeen
target: scalgemeen
这是不正确的,因为“spaans”应该有一个id为='schuisartsen'的父项

请注意,当选择onclick=“goSubcategory”(这是spaans)时,所有具有类类别的元素都将显示:无以及元素行2


有一种方法可以让我获得正确的目标id。

我想这是你的问题。do…while循环应类似于:

do {
//do something
}
while(conditon==true);
下面的步骤也是如此。如果你在其他地方没有任何错误,它可能对你有用

function getParentDivId(divName, classNameParent) {
    do {
        divName = divName.parentNode; // get parentdiv from initial div
        if (divName.className == classNameParent) { // check if parent div belongs to specified class
            return divName.id; // return the id of the parent div
        }
    } while (divName.parentNode); // while div has parent do above function
}

如果你想打破循环,那么使用关键字
break

这里的联系人是什么,似乎应该在quotes@shadow:contact指的是元素id。您好,Amit,感谢您抽出时间检查我的问题。然而,divName.parentNode本身就是一个条件,只要它不为NULL,循环就会继续,并在它变为NULL时保持(并返回NULL)。您需要这样做,while循环一旦找到子类别的第一个实例就结束,这似乎不是问题所在。我很确定这个问题与spaans所属的subcategories元素具有display:none属性有关。如果是这样,您应该接受我的答案,这样它可能对@jhwst的某个人有用。这个问题似乎与此函数无关。
do {
//do something
}
while(conditon==true);
function getParentDivId(divName, classNameParent) {
    do {
        divName = divName.parentNode; // get parentdiv from initial div
        if (divName.className == classNameParent) { // check if parent div belongs to specified class
            return divName.id; // return the id of the parent div
        }
    } while (divName.parentNode); // while div has parent do above function
}