ホームページ > ウェブフロントエンド > jsチュートリアル > jQuery 1.7.2_jquery の getAll メソッドに関する疑問の分析

jQuery 1.7.2_jquery の getAll メソッドに関する疑問の分析

WBOY
リリース: 2016-05-16 17:53:31
オリジナル
1132 人が閲覧しました

getAll メソッドはプライベートであり、操作モジュール内にあります。このコードには、次のような簡単な行が数行だけあります。

コードをコピーします コードは次のとおりです:

function getAll( elem ) {
if ( typeof elem.getElementsByTagName !== "未定義" ) {
return elem.getElementsByTagName( "*" ) {
} else if ( typeof elem.querySelectorAll; !== "未定義" ) {
return elem.querySelectorAll( "*" );
} else {
return []
}
}

このメソッドは関数名からわかります。 HTML要素に渡されたすべての子要素を取得するために使用されます。 3 つの内部分岐があります

1. まず、elem に getElementsByTagName メソッドがあるかどうかを確認し、ある場合は getElementsByTagName メソッドを使用してすべての子要素を取得します。
2. GetElementsByTagName はサポートされていません。次に、elem が querySelectorAll メソッドを使用して要素のサブ要素を取得できるかどうかを確認します。
3、getElementsByTagName と querySelectorAll はサポートされておらず、空の配列を返します。

このコードを見たとき、私は混乱し、2 番目の分岐が少し冗長であるように感じました。

1、getElementsByTagName は、DOM レベル 2 (以前) の API です。すべてサポートされているため、2 番目の API を入力する必要はありません。 . 分岐して直接戻ります。次のコードは冗長ではないでしょうか?
2. querySelectorAll は DOM レベル 3 (新しい) の API であり、IE6/7 ではサポートされていません。

これを見て、最後の 2 つのブランチが冗長だと思いますか? それとも冗長ではない理由を見つけることができますか? つまり、次の条件を満たす要素 ele を見つけるだけです。
「elem には getElementsByTagName メソッドはありませんが、querySelectorAll メソッドがあります。」
多くの検索の後、議論を通じて最終的に答えが見つかりました (Xiaoniu によって発見されました)。 DocumentFragment はこの条件を満たします。

コードをコピー コードは次のとおりです。

var frag = document.createDocumentFragment();
alert('getElementsByTagName' in frag);
alert('querySelectorAll' in frag);


上記のコードは IE9/Chrome/Safari/Firefox で false として表示されます。 /オペラ、本当です。

この時点ではこれ以上の説明はありません。

注: DocumentFragment オブジェクトのいくつかの特別な点
1. IE6/7/8 には createElement メソッドがありますが、他のブラウザ (IE9/10/Safari/Chrome/Firefox/Opera) にはありません
2. IE9/10/Firefox/Safari/Chrome/OperaにはgetElementsByTagNameメソッドはありませんが、querySelectorAllメソッドはあります。
関連:
http://www.jb51.net/article/30352.htm
https://developer.mozilla.org/en/DOM/document .createDocumentFragment
https://developer.mozilla.org/En/DOM/DocumentFragment
http://www.w3.org/TR/DOM-Level -3-Core/core.html#ID-B63ED1A3
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート