我得到了en元素的子节点,我想检查这些标签是否实际上可以包含文本。例如:检查一个元素是否使用带有JavaScript的离散标签关闭
<br />, <img />
应该返回false和
<span></span>, <div></div>, <li></li>
应返回true。谢谢!
我得到了en元素的子节点,我想检查这些标签是否实际上可以包含文本。例如:检查一个元素是否使用带有JavaScript的离散标签关闭
<br />, <img />
应该返回false和
<span></span>, <div></div>, <li></li>
应返回true。谢谢!
遗憾的是,没有办法检测标签是如何写的代码,因为当JavaScript的运行,HTML代码已经被解析成DOM对象。
但是,你的问题似乎更多的是关于一个特定的元素类型是否可以包含文本。这个简单的测试会给你每个元素类型的答案:
function canElementContainText(tagname) {
try {
var e = document.createElement(tagname);
return e.outerHTML.indexOf("/") != -1;
} catch (ex) {
return false;
}
}
例如canElementContainText("div")
回报true
和canElementContainText("img")
回报false
。
然后,您可以将任何元素的tagName
属性传递给此函数来测试它。
var result = canElementContainText(myElement.tagName);
下面的脚本工作得很好(解决跨浏览器的问题):
function containTxt(tag) {
var tags = /^(img|video)$/i; // any values which will be in `tags` set will be treated as they can't have a text value
return !tags.test(tag);
}
console.log(containTxt("img")); // returns false
console.log(containTxt("div")); // returns true
能使用正则表达式:
// these are samples, get elements text using element.innerHTML;
var one = "<a href='something'>Links</a>";
var two = "Lorem ipsum dolor";
function check(str){
return str.match(/<[a-zA-Z]+.*>(.|\n)*<\/[a-zA-Z]+>/) ? true : false;
}
console.log(check(one)); // true
console.log(check(two)); // false
你检查标签是否实际上包含html 。这不是你要求的 – collapsar
什么''
任何可以包含任何形式或方式的文本的元素,也可以是
您可以检查'el.childNodes.length> 0',但通常DOM中的空元素和自闭元素之间没有差别 – Bergi