document.querySelectorAll()
は、ブラウザ間でいくつかの不整合があり、古いブラウザではサポートされていません。これにより、現在、問題が発生することはないでしょう。それは非常に直感的でないスコープメカニズムと他のいくつかのそれほど良くない機能を持っています。また、JavaScriptを使用すると、これらのクエリの結果セットを操作するのが難しくなり、多くの場合、それを実行することができます。:jQueryのは次のようにそれらの作業に機能を提供しfilter()
、find()
、children()
、parent()
、map()
、not()
およびいくつかのより多くの。疑似クラスセレクターで動作するjQuery機能は言うまでもありません。
ただし、私はこれらのものをjQueryの最強の機能とは見なしませんが、クロスブラウザー互換の方法またはajaxインターフェースでのdom(イベント、スタイリング、アニメーション、および操作)の「動作」のような他のもの。
あなただけのjQueryのセレクタエンジンをしたい場合は、いずれかを使用することができますjQueryの自体が使用している:シズルを道ということ、あなたは厄介なオーバーヘッドなしjQuerysセレクタエンジンのパワーを持っています。
編集:参考までに、私はJavaScriptの大好物です。それでも、1行のjQueryを作成する場合に10行のJavaScriptが必要になることもあります。
もちろん、次のようにjQueryを記述しないように訓練する必要があります。
$('ul.first').find('.foo').css('background-color', 'red').end().find('.bar').css('background-color', 'green').end();
これは非常に読みにくいですが、後者はかなり明確です。
$('ul.first')
.find('.foo')
.css('background-color', 'red')
.end()
.find('.bar')
.css('background-color', 'green')
.end();
同等のJavaScriptは、上記の疑似コードで示されているように、はるかに複雑になります。
1)要素を見つけ、すべての要素または最初の要素のみを取ることを検討します。
// $('ul.first')
// taking querySelectorAll has to be considered
var e = document.querySelector("ul.first");
2)いくつかの(おそらくネストされているか再帰的な)ループを介して子ノードの配列を反復処理し、クラスを確認します(クラスリストはすべてのブラウザーで使用できるわけではありません!)
//.find('.foo')
for (var i = 0;i<e.length;i++){
// older browser don't have element.classList -> even more complex
e[i].children.classList.contains('foo');
// do some more magic stuff here
}
3)CSSスタイルを適用する
// .css('background-color', 'green')
// note different notation
element.style.backgroundColor = "green" // or
element.style["background-color"] = "green"
このコードは、jQueryで記述したコードの少なくとも2倍のコード行になります。また、ネイティブコードの重大な速度の利点(信頼性以外)を損なうブラウザー間の問題を考慮する必要があります。
querySelector
メソッドで機能しない独自のセレクターを追加します。(3)jQueryを使用すると、AJAX呼び出しがはるかに迅速かつ簡単になります。(4)IE6 +でのサポート。きっともっとたくさんのポイントが出てくると思います。