ホームページ >ウェブフロントエンド >jsチュートリアル >jQueryの膨満感を失います
コアポイント
nodeList.jsは、jQueryのDOM操作の代替として、同様の機能を提供しますが、(圧縮後4K)、ネイティブブラウザーAPIの改善を利用します。
jQueryとは異なり、nodelist.jsはノードアレイを単一ノードとして扱い、クリーナーコードを有効にし、ノーデリストオブジェクト操作を容易にします。
nodeList.jsには、属性を設定および取得し、要素固有の方法を呼び出し、ノデリストのノードへのアクセスを含む特別な方法が含まれています。 prevObject
owner
p.tip { バックグラウンドカラー:RGBA(128,128,128,0.05); Border-Top-Right-Radius:5px; 国境圏 - 右とradius:5px; パディング:15px 20px; 国境左:10pxソリッドRGBA(128,128,128,075); }
理由は次のとおりです
jQueryには、必要または使用していない多くの機能が含まれています(したがって、巨大であることは不要です)。
addEventListener
attachEvent
問題は何ですか? NodeListオブジェクトは、ノードのコレクションであり、
メソッドおよび
メソッドによって返されるものです。
Node.childNodes
ダイナミクスノデリストが時々あります(混乱する可能性があります):document.querySelectorAll
は動的です。
これは、動的で静的なものがわからないため、問題になる可能性があります。 NodeListから各ノードを削除し、ノデリストが空であるかどうかを確認しない限り。空の場合、動的なノデリストがあります(それはただの悪い考えです)。 Node.childNodes
さらに、ブラウザは、これらのノデリストオブジェクトを操作するための有用な方法を提供しません。
たとえば、残念ながら、
を使用してノードをループすることはできません。
したがって、forEach
次のことを行う必要があります
<code class="language-javascript">var nodes = document.querySelectorAll('div'); nodes.forEach(function(node) { // do something }); // 错误:nodes.forEach 不是函数</code>または「ハック」のみを使用することさえあります:
<code class="language-javascript">var nodes = document.querySelectorAll('div'); for(var i = 0, l = nodes.length; i < l; i++) { // do something with nodes[i] }</code>ブラウザのネイティブノデリストには、1つの方法しかありません。 Indexを介してNodeListからノードを返します。アレイを使用するようにノードにアクセスできる場合(
を使用)、それは完全に役に立たない:
<code class="language-javascript">[].forEach.call(document.querySelectorAll('div'), function(node) { // do something });</code>
これは、nodelist.jsが登場する場所です。JQUERYを使用してブラウザネイティブAPIを使用してDOMを簡単に操作できますが、4K圧縮サイズのみが必要です。 item
array[index]
<code class="language-javascript">var nodes = document.querySelectorAll('div'); nodes.item(0) === nodes[0]; // true</code>
Nodelist.jsを作成しました。なぜなら、ネイティブDom APIを使用しているが、それらをより簡潔にしたいので、コードを作成するときに多くの冗長性を減らします(ループなど)。
nodeList.jsは、単一のノードであるかのようにノードの配列(つまり、ノデリスト)を操作できるネイティブDom APIのラッパーです。これにより、ブラウザのネイティブNodeListオブジェクトよりも多くの機能が得られます。
使用法:
domノードの選択は簡単です:
//ノデリストに戻ります
この方法は、バックグラウンドで使用されています
。$$(selector);
しかし、jqueryと比較してどうですか?
この質問をしてくれてうれしいです。ネイティブJS、jQuery、およびnodelist.jsを比較しましょう。 querySelectorAll(selector)
ネイティブjs:
jquery:
<code class="language-javascript">var buttons = document.querySelectorAll('button'); // 返回浏览器无用的 NodeList for(var i = 0, l = buttons.length; i < l; i++) { buttons[i].textContent = 'Click Me'; }</code>
nodelist.js:
<code class="language-javascript">$('button').text('Click Me');</code>
ここでは、nodeList.jsがノデリストを単一のノードとして効果的に扱うことができることがわかります。つまり、ノデリストを参照して、
<code class="language-javascript">$$('button').textContent = 'Click Me';</code>
さあ、各ボタンにクリックイベントリスナーを追加しましょう:textContent
<code class="language-javascript">$$('button').set('textContent', 'Click Me');</code>
jquery:
<code class="language-javascript">var buttons = document.querySelectorAll('button'); // 返回浏览器无用的 NodeList for(var i = 0, l = buttons.length; i < l; i++) { buttons[i].addEventListener('click', function() { this.classList.add('clicked'); }); }</code>
<code class="language-javascript">$('button').on('click', function() { $(this).addClass('click'); // 或将 jQuery 与原生混合使用 `classList`: this.classList.add('clicked'); });</code>方法はかなり良いです。私のライブラリはブラウザのネイティブDOM API(したがって
)を使用していますが、それは私たちがこの方法のエイリアスを作成することを妨げません:
<code class="language-javascript">$$('button').addEventListener('click', function() { this.classList.add('clicked'); });</code>
悪くない!これは、独自の方法を追加する方法を示しています
<code class="language-javascript">var nodes = document.querySelectorAll('div'); nodes.forEach(function(node) { // do something }); // 错误:nodes.forEach 不是函数</code>
nodeList.jsはArray.prototype
から継承しますが、直接ではありません。いくつかの方法が変更されているため、ノデリスト(ノードの配列)でそれらを使用することは理にかなっています。
push
およびunshift
およびpush
メソッドはパラメーターとしてノードのみをとることができます。そうしないと、エラーがスローされます。
unshift
<code class="language-javascript">var nodes = document.querySelectorAll('div'); for(var i = 0, l = nodes.length; i < l; i++) { // do something with nodes[i] }</code>または
これら2つのメソッドは、JavaScriptのネイティブ配列メソッドのように、ノデリストを変更します。 push
unshift
Array#push
Array#unshift
length
concat
javascriptのconcat
メソッドと同様に、新しいノデリストを返します。
<code class="language-javascript">[].forEach.call(document.querySelectorAll('div'), function(node) { // do something });</code>
、concat
、
、concat
、Array#concat
、
pop
およびmap
またはslice
とは異なり、後者は常にパラメーターとして渡されるものに関係なく、常に配列内の要素をポップアップ表示またはシフトします。 filter
pop
shift
およびArray#pop
メソッドは、実際の配列で行うのと同じことを行いますが、ノデリストを返します。 Array#shift
から直接継承しないため、nodeList.jsをロードするときにmap
にメソッドを追加すると、継承されません。
ここで、Nodelist.jsの残りの配列メソッドを表示できます。 slice
filter
特別な方法
nodeList.jsには、4つの一意の方法と、Array.prototype
と呼ばれるプロパティがあります。 Array.prototype
owner
いくつかの要素には、そのタイプの要素に固有の属性があります(たとえば、アンカータグのprevObject
属性)。これが、
メソッドを使用する方法です。
<code class="language-javascript">var nodes = document.querySelectorAll('div'); nodes.forEach(function(node) { // do something }); // 错误:nodes.forEach 不是函数</code>
set
メソッドを使用して、各要素のこれらのプロパティを設定できます。
<code class="language-javascript">var nodes = document.querySelectorAll('div'); for(var i = 0, l = nodes.length; i < l; i++) { // do something with nodes[i] }</code>
ノデリストを返して、メソッドチェーンを許可します。 set
などで使用できます(両方とも同等):textContent
<code class="language-javascript">[].forEach.call(document.querySelectorAll('div'), function(node) { // do something });</code>1回の呼び出しに複数のプロパティを設定することもできます。
上記のすべての操作は、任意の属性を使用して実行できます。
<code class="language-javascript">var nodes = document.querySelectorAll('div'); nodes.item(0) === nodes[0]; // true</code>
style
<code class="language-javascript">var buttons = document.querySelectorAll('button'); // 返回浏览器无用的 NodeList for(var i = 0, l = buttons.length; i < l; i++) { buttons[i].textContent = 'Click Me'; }</code>
call
メソッドでは、要素固有のメソッドを呼び出すことができます(たとえば、ビデオ要素で
call
pause
<code class="language-javascript">$('button').text('Click Me');</code>
item
メソッドは、jQueryの
item
eq
<code class="language-javascript">$$('button').textContent = 'Click Me';</code>
owner
属性は、jqueryの
owner
prevObject
スタイルアレイを返し、
<code class="language-javascript">$$('button').set('textContent', 'Click Me');</code>
nodeList.js互換性btns.style
owner
私のライブラリは、以下に説明するように、すべての主要な新しいブラウザと互換性があります。 style
バージョン
6
firefox
ノデリストとhtmlCollectionはどちらもノードコレクションです。それらの主な違いは、ノデリストが任意のノードタイプを含めることができることですが、HTMLCollectionは要素ノードのコレクションです。 HTMLCollectionも動的です。つまり、ドキュメント構造が変更されると自動的に更新されます。一方、NodeListは静的であり、ドキュメントの変更を反映するために更新しません。
ノデリストを配列に変換する方法は?
メソッドまたは拡張演算子を使用して、ノデリストをアレイに変換できます。それを行う方法は次のとおりです<code class="language-javascript">var nodes = document.querySelectorAll('div'); nodes.forEach(function(node) { // do something }); // 错误:nodes.forEach 不是函数</code>
JQueryのチェーンメカニズムは、変更を加える前に以前のオブジェクトを保存することにより機能します。これにより、.end()
メソッドを使用して以前の状態に復元できます。実際のDOM要素を取得したい場合は、.get()
メソッドまたは配列表記を使用できます。
for loop、for ... of loop、またはforEach()
メソッドを使用して、ノデリストをループすることができます。以下は、forループを使用した例です:
<code class="language-javascript">var nodes = document.querySelectorAll('div'); for(var i = 0, l = nodes.length; i < l; i++) { // do something with nodes[i] }</code>
jQueryの.prev()
メソッドは、前の兄弟のすぐ隣の選択した要素を選択するために使用されます。セレクターが提供されている場合、以前の兄弟要素は、セレクターが一致している場合にのみ取得されます。
jQueryは発売時のゲームチェンジャーでしたが、最新のJavaScriptエコシステムは大幅に変化しました。 JQueryを人気にする機能の多くは、JavaScript自体に組み込まれています。ただし、JQueryは依然として広く使用され、維持されており、一部のプロジェクトには適した選択かもしれません。
配列表記またはitem()
メソッドを使用して、NodeListから特定のノードを選択できます。それを行う方法は次のとおりです
<code class="language-javascript">[].forEach.call(document.querySelectorAll('div'), function(node) { // do something });</code>ノデリストのメソッドを使用、フィルター、および削減できますか?
QuerySelectorとQuerySelectorallの違いは何ですか?
指定されたCSSセレクターに一致するドキュメントの最初の要素を返し、querySelector
はCSSセレクターに一致するすべての要素のノデリストを返します。 querySelectorAll
プロパティをチェックして、Nodelistが空であるかどうかを確認できます。長さが0の場合、ノデリストは空です。それを行う方法は次のとおりです
length
以上がjQueryの膨満感を失いますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。