2014-10-10 43 views
2

檢查特定的DOM元素我在代碼方面有輕微問題如果DOM元素條件檢查的要求是,我不應該讓「BR」標記可以傳遞在Javascript

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

僅供參考,F12打開 「控制檯」 在大多數瀏覽器。使用'console.log'可以使打印調試信息變得更容易,因爲您不必一直點擊。 – Domi 2014-10-10 06:22:45

回答

1

當你

typeof (nodeList[item].tagName) !== 'BR' 

你實際上是在檢查這將是一個Boolean對象,它表達

nodeList[item].tagName !== 'BR' 

的結果類型將永遠考慮真理。這就是爲什麼你的代碼不會跳過BR標籤。相反,你可能希望將tagNameBR比較喜歡這種

if (nodeList[item].tagName && nodeList[item].tagName.toUpperCase() !== 'BR') { 
    alert(nodeList[item].tagName); 
} 

此轉換tagName爲大寫,然後將其與BR比較。如果它們兩者不同,則它允許警報執行。

+0

感謝您的明確解釋... – 2014-10-10 06:25:24

1

你不需要typeofThis 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

如果您使用'children'(IE> 9)而不是'childNodes',您將只獲取子元素,然後可以跳過'tagName!= undefined'檢查。 – 2014-10-10 06:27:22

+0

@torazaburo很好的信息,真的有幫助,非常感謝 – 2014-10-10 06:31:25

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

} 

http://jsfiddle.net/agana62d/8/

+0

一些瀏覽器發回標籤被定義的情況下,因此我通常正常化爲小寫。 – Derek 2014-10-10 06:28:58

+0

非常優化,我學到很多,謝謝 – 2014-10-10 06:38:38