我基本上同意每个人的观点,黑名单将是一种非常正统的方式,但如果我们真的需要测试能力,那么这将是我认为的一种方式(使用一些jquery):
isTextContainerTag=function(tagName){
try{
var test = $('<'+tagName+'></'+tagName+'>');
test.html(123);
if(test.html()=='123'){
return true;
}else{
return false;
}
}
catch(err){return false;}
}
我在 Chrome 上对各种标签名称进行了测试,得到了以下结果:
console.log('input',isTextContainerTag('input'));//answer:false
console.log('textarea',isTextContainerTag('textarea'));//true
console.log('option',isTextContainerTag('option'));//true
console.log('ul',isTextContainerTag('ul'));//true
console.log('li',isTextContainerTag('li'));//true
console.log('tr',isTextContainerTag('tr'));//true
console.log('td',isTextContainerTag('td'));//true
console.log('hr',isTextContainerTag('hr'));//false
console.log('br',isTextContainerTag('br'));//false
console.log('div',isTextContainerTag('div'));//true
console.log('p',isTextContainerTag('p'));//true
console.log('html',isTextContainerTag('html'));//false
console.log('body',isTextContainerTag('body'));//false
console.log('table',isTextContainerTag('table'));//false
console.log('tbody',isTextContainerTag('tbody'));//true
我们还可以在这两个示例中使用 jquery "prop" 测试一些真实标签:
<div id="A">AAAAAA</div>
<br id="B">
这使:
var obj1 = $('#A').prop('tagName');
var obj2 = $('#B').prop('tagName');
console.log('id:A (div)',isTextContainerTag(obj1));//true
console.log('id:B (br)',isTextContainerTag(obj2));//false
我敢肯定它远非完美,但研究起来很有趣。