非常抱歉问这种问题,但我在 You Might Not Need jQuery 或其他任何网站上都找不到答案,我真的很想知道:
jQuery 的 .parents() 方法在纯 JavaScript 中等价于什么?
例如,了解如何在纯 JavaScript 中执行此操作将非常有帮助:
jQuery(element).parents('.className');
非常抱歉问这种问题,但我在 You Might Not Need jQuery 或其他任何网站上都找不到答案,我真的很想知道:
jQuery 的 .parents() 方法在纯 JavaScript 中等价于什么?
例如,了解如何在纯 JavaScript 中执行此操作将非常有帮助:
jQuery(element).parents('.className');
在DOM API中,没有一个与jQuery的parents()
相等的函数/属性。有parentNode
属性(正如Oriol指出的那样,parentElement
属性将防止您从document.documentElement
到document
),它是访问它的元素的父节点(或父元素),如果没有则为null
。要大致匹配jQuery的parents()
,可以循环遍历它(例如,获取parentNode
/parentElement
的parentNode
/parentElement
等)以查找所有父级。如squint所述,在较新的浏览器上,每个级别都可以使用matches
来检查父级是否与选择器匹配(以匹配当您向其传递选择器时的jQuery行为parents()
)。
var elm = document.getElementById("target");
var parents = getParents(elm);
console.log(Array.prototype.map.call(
parents,
function(e) {
return e.nodeName + (e.id ? "#" + e.id : "");
}
).join(", "));
function getParents(e) {
var result = [];
for (var p = e && e.parentElement; p; p = p.parentElement) {
result.push(p);
}
return result;
}
<div id="outermost">
<div id="middle">
<div id="inner">
<div id="target"></div>
</div>
</div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
parentElement
替代parentNode
以避免使用document
。 - Oriolmatches
/matchesSelector
更现代的浏览器。 - BergiparentElement
不需要这样做,并且比 matches
有更多的支持。 - OriolmatchesSelector
和matches
支持混淆了。 - Bergi当你通过某些方法(例如document.getElementById()
,document.querySelector()
等)获取HTML时,它将返回一个Node对象,该对象的.parentNode
属性是其父节点对象。
.parents()
:
我之前写过这个函数:
function parents(node) {
let current = node,
list = [];
while(current.parentNode != null && current.parentNode != document.documentElement) {
list.push(current.parentNode);
current = current.parentNode;
}
return list
}
parentElement
,无需检查 != document
。 - Oriol.parentNode
之前,您需要确保current
不为null
。 - user1106925body
的 parentElement
不是文档吗? - bren
while ((element = element.parentElement)) { if (element.matches('.className')) { result.push(element) } }
зҝ»иҜ‘пјҡеҪ“element
еӯҳеңЁзҲ¶е…ғзҙ ж—¶пјҢйҮҚеӨҚжү§иЎҢд»ҘдёӢж“ҚдҪңпјҡеҰӮжһңиҜҘзҲ¶е…ғзҙ зҡ„зұ»еҗҚдёә.className
пјҢеҲҷе°Ҷе…¶еҠ е…ҘеҲ°result
ж•°з»„дёӯгҖӮ - user1106925