是否有一种可移植的方法来检查某个元素是否可以接受并显示childNodes,除了检查tagName switch(node.tagName)
或类似的?我需要实现某种d&d,并且我想在最接近document.elementFromPoint
的位置插入移动的节点(拖动的节点已被删除)。但是,据我所知,例如,在<img>
中插入一个元素是没有意义的,所以在这种情况下我需要insertBefore
这个img的parentNode。当然,可以检查标签列表,但也许有更便携和简单的解决方案?
谢谢
不,我认为没有内置功能来检查某个标签是否是a void one。这是一个非常随意的HTML决定,它没有DOM属性。 (在XML文档中,理论上每个元素都可以有子元素)。
所以检查官方列表确实是要走的路。对于HTML4,请参阅Which HTML tags have no content,对于HTML5,请参阅list of void elements in the spec:
area, base, br, col, embed, hr, img, input, keygen, link, menuitem, meta, param, source, track, wbr
您可以使用this answer的方法(问题和答案不是我的)。它回答了不同的问题,但可能仍然有用。我在这里粘贴了接受的答案,虽然这个问题还有其他答案,但对你有用。这是检查元素是否可以包含文本
function canElementContainText(tagname) {
try {
var e = document.createElement(tagname);
return e.outerHTML.indexOf("/") != -1;
} catch (ex) {
return false;
}
}
用法:
var result = canElementContainText(myElement.tagName);