2014-02-26 45 views
7

我得到了en元素的子节点,我想检查这些标签是否实际上可以包含文本。例如:检查一个元素是否使用带有JavaScript的离散标签关闭

<br />, <img /> 

应该返回false和

<span></span>, <div></div>, <li></li> 

应返回true。谢谢!

+2

什么''

+0

任何可以包含任何形式或方式的文本的元素,也可以是

+0

您可以检查'el.childNodes.length> 0',但通常DOM中的空元素和自闭元素之间没有差别 – Bergi

回答

8

遗憾的是,没有办法检测标签是如何写的代码,因为当JavaScript的运行,HTML代码已经被解析成DOM对象。

但是,你的问题似乎更多的是关于一个特定的元素类型是否可以包含文本。这个简单的测试会给你每个元素类型的答案:

function canElementContainText(tagname) { 
    try { 
     var e = document.createElement(tagname); 
     return e.outerHTML.indexOf("/") != -1; 
    } catch (ex) { 
     return false; 
    } 
} 

例如canElementContainText("div")回报truecanElementContainText("img")回报false

然后,您可以将任何元素的tagName属性传递给此函数来测试它。

var result = canElementContainText(myElement.tagName); 
+0

完美,这将工作。谢谢! – Ood

+0

非常欢迎! :) – wizulus

+0

这个脚本不适用于Firefox! – tnanoba

3

下面的脚本工作得很好(解决跨浏览器的问题):

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 
+0

这很适合检查标签是否实际*包含*文本,但不包含如果*可以*包含文字。不管怎么说,还是要谢谢你! – Ood

+0

@Ood见更新,不客气! – tnanoba

-4

能使用正则表达式:

// 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 
+0

你检查标签是否实际上包含html 。这不是你要求的 – collapsar

相关问题