2011-11-09 9 views
1

ページ内のいずれかのタグにjsイベント属性(onload、onunload、onfocusなど)が含まれているかどうかを調べようとしています... 属性の存在のためにDOM内のすべての要素ノードをテストする

var attr = [ 
"onLoad", 
"onunload", 
"onclick", 
"ondblclick", 
"onmousedown", 
"onmouseup", 
"onmouseover", 
"onmousemove", 
"onmouseout", 
"onfocus", 
"onblur", 
"onkeypress", 
"onkeydown", 
"onkeyup", 
"onsubmit", 
"onreset", 
"onselect", 
"onchange"]; 

をして、私はすべてのelementsByTagName取得し、その属性をチェックしたい:をチェックするイベントの配列を持っている(私はそれらすべてを持っていると思う)

var getAttrs = function() { 
var i = 0, 
    j, 
    all = document.getElementsByTagName('*'), 
    max = all.length, 
    eventsLen = attr.length; 


for (; i < max; i++) { 

    console.log('iterating through objects'); 

    for (j = 0; j < eventsLen; j++) { 

     if (all[i].hasAttribute(attr[j])) { 
      console.log('found an instance of an intrinsec event', attr[j]); 
     } 

    } 

} 

}; 

はこれではありません私は見つけたいと思っていた属性を得ることができません。

また、javascriptを使用するすべてのタグ内のすべての属性を検索したいと思います(< a href = "javascript:void(0)" >など) ?

ありがとうございます!

+0

私がしようこれは動作します:P – mquander

答えて

0

変更:それはまた、プロパティことができたよう

if (all[i][attr[j]]) { 

と属性とは対照的に:

if (all[i].hasAttribute(attr[j])) { 

へ。あなたはどちらかの属性を持つすべての要素を取得したい場合は、次のコードを使用することができます

+0

... OPはプログラムで追加されたイベントハンドラ( 'elem.onclick = function(){...};のようなもの)をOPに含めるか、 HTMLソースコード... –

1

var attr = ["onLoad", "onunload", "onclick", "ondblclick", "onmousedown", 
      "onmouseup", "onmouseover", "onmousemove", "onmouseout", "onfocus", 
      "onblur", "onkeypress", "onkeydown", "onkeyup", "onsubmit", "onreset", 
      "onselect", "onchange", "href^='javascript:'"]; 
var selector = "[" + attr.join("],[") + "]"; 
//selector looks like "[onLoad][onunload]...[href^='javascript:']" 
var eitherAttribute = document.querySelectorAll(selector); 
for(var i=0, len=eitherAttribute.length; i<len; i++){ 
    console.log(eitherAttribute[i]); //Logs the element 
} 

あなたが複数の属性に一致するすべての要素を選択する場合は、使用:

//Example: onclick, AND href starting with javascript: 
document.querySelectorAll("[onclick][href^='javascript:']"); 

詳細については、MDN: document.querySelectorAllを参照してください。

var checkForEventAttrs = (function() { 
    var eventAttrs = [ /* a list of attribute name strings */ ]; 

    function walkTheDOM(node, func) { 
      func(node); 
      node = node.firstElementChild; 
      while (node) { 
       walkTheDOM(node, func); 
       node = node.nextElementSibling; 
      } 
    } 

    return function() { 
     walkTheDOM(document.body, function (node) { 
      eventAttrs.forEach(function (eventAttr) { 
       if (node.hasAttribute(eventAttr)) { 
        console.log('The attribute ' + eventAttr + ' found.'); 
       } 
      }); 
     }); 
    }; 
})(); 

をしてからちょうどコンソールにそれらの属性を記録するために、その関数を呼び出します:MDN: Selectors

0

これは私がそれを行うだろうかです:


あなたはより柔軟なセレクタが必要な場合は、を見て
checkForEventAttrs(); 

ライブデモ:http://jsfiddle.net/F5AEy/

関連する問題