3

特定の要素からDOMノードを「上に」反復して、「アニメーション」属性を持つ最初の親要素を取得しようとしています。

var el = evt.target;
    console.log(el);
while (!el.hasAttribute('animated'))
   { el = el.parentNode; }
return el;
    console.log(el);

エラーをスローします:

>>>Uncaught TypeError: Object #<HTMLDocument> has no method 'hasAttribute'

これはどのように可能ですか?変数を明確に宣言しましたel。最初のログは正しいです。

4

3 に答える 3

7

documentオブジェクト:

  • ノードです
  • ルート要素のですparentNode(要素となる HTML を使用している場合<html>)
  • 要素ではありません。

要素のみが属性を持つため、要素オブジェクトのみがhasAttributeメソッドを持ちます。

ドキュメント オブジェクトに到達したら (または要素をテストしなくなったら)、テストを停止する必要があります。

while (
    el.nodeType === 1 && 
    (!el.hasAttribute('animated'))
) {
于 2012-05-30T15:18:07.197 に答える
1

var el = evt.target はオブジェクトであるため、属性documentはありません。hasAttribute

于 2012-05-30T15:20:35.837 に答える
1

nullまたはその属性を持つ祖先ノードを返す関数にすることもできます。

function findNodeWithAttribute(el, attr) {
    while (true) {
        if (!el || !el.hasAttribute) {
            return null;
        } else if (el.hasAttribute(attr)) {
            return el;
        }
        el = el.parentNode;
    }
}
于 2012-05-30T15:42:06.133 に答える