检查Javascript中的特定DOM元素

检查Javascript中的特定DOM元素,javascript,html,Javascript,Html,关于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'))

关于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在这里

有人能告诉我哪里出错了吗


谢谢您的时间

您不需要
类型的

代码:

当你这样做的时候

typeof (nodeList[item].tagName) !== 'BR'
实际上,您正在检查表达式结果的类型

nodeList[item].tagName !== 'BR'
这将是一个布尔对象,它将始终被认为是真实的。这就是为什么您的代码不会跳过BR标记。相反,您可能希望将标记名
BR
进行如下比较

if (nodeList[item].tagName && nodeList[item].tagName.toUpperCase() !== 'BR') {
    alert(nodeList[item].tagName);
}
这将
标记名
转换为大写,然后将其与
BR
进行比较。如果两者不同,则允许执行警报。

尝试以下操作:

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);
        }
    }

}

仅供参考,F12在大多数浏览器中都会打开“控制台”。使用
console.log
可以更轻松地打印调试信息,因为您不必一直单击。如果使用
children
(IE>9)而不是
childNodes
,则只会得到子元素,然后可以跳过
标记名!=未定义
检查。@torazaburo很好的信息,非常有用,非常感谢。有些浏览器会将标记定义的大小写发回,因此我通常将其规范化为小写。
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);
        }
    }

}