关于DOM元素的if条件检查的代码我有一个小问题,要求是我不允许'BR'标记传递
function testclick(handler) {
var nodeList = handler.childNodes;
for (var item in nodeList) {
if (typeof (nodeList[item].tagName) !== 'undefined') {
if (typeof (nodeList[item].tagName !== 'BR')) {
alert(nodeList[item].tagName);
}
}
}
}
工作的Jsfiddle就在这里
http://jsfiddle.net/ganesh_vellanki/agana62d/6/
有人可以建议我哪里出错
感谢您的时间
答案 0 :(得分:2)
试试这个:
function testclick(handler) {
var nodeList = handler.childNodes;
for (var item in nodeList) {
var tagName = nodeList[item].tagName !== undefined ? nodeList[item].tagName.toLowerCase() : null;
if (tagName !== null && tagName !== 'br') {
alert(tagName);
}
}
}
答案 1 :(得分:1)
您不需要typeof
。 This is the updated fiddle
代码:
function testclick(handler) {
var nodeList = handler.childNodes;
for (var item in nodeList) {
var tagName = nodeList[item].tagName;
if (tagName !== 'BR' && tagName != undefined) {
console.log(tagName);
}
}
}
答案 2 :(得分:1)
当你这样做时
typeof (nodeList[item].tagName) !== 'BR'
您实际上正在检查表达式
的结果类型nodeList[item].tagName !== 'BR'
这将是一个布尔对象,它将始终被视为truthy。这就是为什么您的代码不会跳过BR标记的原因。相反,您可能希望将tagName
与BR
进行比较
if (nodeList[item].tagName && nodeList[item].tagName.toUpperCase() !== 'BR') {
alert(nodeList[item].tagName);
}
这会将tagName
转换为大写,然后将其与BR
进行比较。如果两者不同,则允许执行警报。