4

ページ内の同じ ID を持つ要素をカウントするときに .length が常に 1 を返すように見える理由を理解するのに苦労しています。HTMLドキュメントには一意のHTML IDを持つ要素のみが必要であることは知っていますが、私が取り組んでいるプロジェクトでは、ユーザーが誤って重複を追加する可能性があります。

では、要素 ID をカウントするときに jQuery が常に 1 を返すのは通常の動作ですか?

<div id="1">foo</div>
<div id="1">foo</div>

jQuery(function(){
   alert(jQuery('#1').length); // returns 1
});

ここに例を作成しました:http://jsfiddle.net/eSNZx/

ご協力いただきありがとうございます

4

7 に答える 7

12

0 または 1 を返します。同じ ID を持つ複数の要素は無効です。

これは jQuery や JavaScript の制限ではなく、HTML の制限です。7.5.2 Element identifiers: the id および class 属性を確認して、それに関する公式の言葉を確認してください。

于 2013-07-17T14:55:52.223 に答える
7

はい、これは正常です。ただし、属性 equals セレクターを使用することで回避できます。

$("[id=1]").length

明らかに、一意でない ID を持つことは無効です。ユーザー入力を扱っているため、防止していないと発生する可能性があります。

または、.children()、.find()、.siblings()、.filter() を使用して同じ効果を得ることができます。または、次のようなより複雑なセレクターも可能です。#parent #1

于 2013-07-17T15:00:51.747 に答える
3

識別子は、その性質上、一意であることを意図しているためです。幸いなことに、jQuery は、ほとんどの場合、最初の 1 つだけを選択することで、これを適切かつ完全に合理的に処理します。

同じ ID を持つ複数の要素を追加することはできますが、それを行うのは無意味であり、そのような種類の「競合する」動作は十分に予想されます。

于 2013-07-17T14:56:21.187 に答える
2

はい、常に最大1 です。ただし、同じ ID を持つ複数の要素がある (無効な) ページで機能します。ただし、予期しない結果が生じる可能性があるため、これは避けてください (以下を参照)。

以下については、jQuery のドキュメントをID Selector (“#id”)確認してください。

ID Selector (“#id”)
      説明: 指定された id 属性を持つ単一の要素を選択します。id セレクターを引数として(または) を

      呼び出すと、0 個または 1 個の DOM 要素のコレクションを含む jQuery オブジェクトが返されます。jQuery()$()

そのリンクからのメモは、無効なページの動作を説明しています。

id値は、ドキュメント内で 1 回だけ使用する必要があります。複数の要素に同じ ID が割り当てられている場合、その ID を使用するクエリ は、DOM で最初に一致した要素のみを選択します。ただし、この動作 に依存するべきではありません。同じ ID を使用する複数の要素を持つドキュメントは無効です。

于 2013-07-17T14:57:49.117 に答える
2

ID は一意である必要があるため、これはおそらくこれを行うブラウザーであり、jQuery ではありません。document.getElementById('1')ゼロまたは 1 つの要素のみを返します。

于 2013-07-17T14:57:11.173 に答える
1

これは、jQuery セレクターが の ID を持つ 1 つの要素のみを返すためです1。これは、ID が一意であると想定されているためです。このフィドルが示すように id を class に変更し、jQuery クラス セレクターを使用して選択してみてください。

更新されたフィドルは次のとおりです。http://jsfiddle.net/eSNZx/

于 2013-07-17T14:57:36.550 に答える
0

私はそのエラーがあり、私は書きました

$('div[name=1]').length

これで問題は解決しました。

于 2014-12-07T16:26:14.403 に答える