[英]How do you target THIS Parent, from a child to make another child div show using nothing but classes with pure javascript?
因此,我有一堆動態加載的數據,因此我必須使用類來實現。
僅使用純JavaScript而不使用jquery,如何做到這一點,以便當您單擊div中的view more時,隱藏的div僅從父級顯示?
從結構上講,您有兩種選擇。
單擊.classViewMore
,可以獲取事件的目標(很可能在this
指針中),該事件的目標將是單擊的.classViewMore
項。
從該對象開始,您可以升至父對象(這將使您的父項成為Child
項)。
從Child
那里,您可以轉到同級兄弟中找到“ Hidden Child
,也可以轉到.classDiv
父對象,然后找到包含的.classHiddenDiv
。
這就是使用DOM層次結構查找共享同一父項的其他項。 如果沒有實際的HTML,則很難提供確切的代碼,但這將是這樣的:
function classViewMoreClickHandler(e) {
// find next sibling of our parent
var childElem = this.parentNode;
var hiddenChildElem = childElem.nextSibling;
}
或者,轉到.classDiv父級,它看起來像這樣:
function classViewMoreClickHandler(e) {
var parent = this.parentNode.parentNode;
var hiddenChild = parent.querySelectorAll(".classHiddenDiv")[0];
}
如果您要定期使用純JS工作,那么您可能希望使用純javascript的jQuery的.closest()
方法的類似物,該方法可以找到與特定選擇器匹配的祖先,這對於某些常見的選擇器可能是非常有用的父類的DOM導航。 例如,您可以使用以下方法提供更強大的解決方案:
function hasClass(elem, cls) {
var str = " " + elem.className + " ";
var testCls = " " + cls + " ";
return(str.indexOf(testCls) != -1) ;
}
function closest(start, cls) {
while (start && start !== document.documentElement && !hasClass(start, cls)) {
start = start.parentNode;
}
return start;
}
function classViewMoreClickHandler(e) {
var p = closest(this, ".classDiv");
if (p) {
var hiddenChild = p.querySelectorAll(".classHiddenDiv")[0];
// do whatever you want to hiddenChild here
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.