Check - can节点有孩子吗?

问题描述 投票:4回答:2

是否有一种可移植的方法来检查某个元素是否可以接受并显示childNodes,除了检查tagName switch(node.tagName)或类似的?我需要实现某种d&d,并且我想在最接近document.elementFromPoint的位置插入移动的节点(拖动的节点已被删除)。但是,据我所知,例如,在<img>中插入一个元素是没有意义的,所以在这种情况下我需要insertBefore这个img的parentNode。当然,可以检查标签列表,但也许有更便携和简单的解决方案?

谢谢

javascript html dom
2个回答
5
投票

不,我认为没有内置功能来检查某个标签是否是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

1
投票

您可以使用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);
© www.soinside.com 2019 - 2024. All rights reserved.