最初は、多くの人が jquery のセレクターとこれら 2 つの API を比較します (私も同様です) 類似点と相違点を比較するのは問題ありませんが、特に dom でこの API を呼び出す場合、一部の学生がブラウザーでのこれら 2 つの API の実装を誤解する原因になりました。要素。
以下は私の jsFiddle の例です。これを使って説明します:
js コード:
(function(global) {
global.doc = document;
global.body = doc.getElementsByTagName('body')[0];
global . $ = function(id) {
return doc.getElementById(id);
global.Logger = function(id) {
this.logElem = $(id); this .logArr = [];
global.Logger.prototype = {
コンストラクター: global.logger,
append: function(comment) {
this.logArr.push( '
' コメント '
');
},
flush: function() {
this.logElem.innerHTML = this.logArr.join(''); 🎜 >},
clear: function() {
this.logElem.innerHTML = '';
this.logArr = []
}); this );
(function() {
var logger = new Logger('log');
var items = $('inner').querySelectorAll('#main h4.inside');
logger.append(items.length);
for(var i = 0, len = items.length; i < len; i ) {
logger.append(items[i].innerHTML);
}
logger.flush();
})();
(function(global) {
global.doc = document;
global.body = doc.getElementsByTagName( ' body')[0];
global.$ = function(id) {
return doc.getElementById(id)
}
global.Logger = function(id) {
this .logElem = $(id);
this.logArr = [];
global.Logger.prototype = {
コンストラクター: global.logger,
append: function(コメント ) {
this.logArr.push('
' コメント '
');
},
flush: function() {
this.logElem.innerHTML = this.logArr.join('');
},
clear: function() {
this.logElem.innerHTML = ''; }
};
})(this);
(function() {
var logger = new Logger('log');
var items = $('inner')。 querySelectorAll ('#main h4.inside');
logger.append(items.length);
for(var i = 0, len = items.length; i
logger .append(items[i].innerHTML);
}
logger.flush()
})();
html コード:
コードをコピー
誤解は $('inner').querySelectorAll('#main h4 .inside') 多くの人は、最初は div[id='inner'] の子から直接検索されると考えています (私もです)、この #main は少し面倒です。実際、セレクター文字列に基づいてドキュメント全体を検索し、div[id='inner'] に属する子ノードを返します。多くの人は疑問に思うでしょう。それなら、親ノードに従って子ノードを直接検索することで実装すればいいのではないか? elem.getElementsByTagName と同じように、私のアイデアは柔軟なセレクター文字列を持つことです。