重複したIDはjqueryのセレクタを台無しにしていますか?
-
20-08-2019 - |
質問
私は2つのdiv要素を持っていた場合、両方のid = "myDiv" と
両方のdivをフェードアウト$("#myDiv").fadeOut();
でしょうか?それとものみ第一/第二フェードでしょうか?またはnoneすべてで?
私はそれがフェードアウトどちら変更するにはどうすればよい?
注:私は、重複したIDを知っている基準に反しているが、私はfancyboxモーダルポップアップを使用していますし、それがポップアップのコンテンツをページ上の指定されたコンテンツを複製します。誰もがこれを回避する方法を知っていれば(多分私はfancyboxの間違ったを使用しています)私に教えてくださいます。
解決
jQueryのは、1つの要素と一致します。最大で1つのElement
オブジェクトの配列は、$("#foo").get()
によって返されます。詳細については、 jQueryのドキュメントを参照してください、またはそれを自分を試してみます。
$(function() {
alert($("#foo").length);
});
他のヒント
要素のIDは一意であると考えられています。同じIDの複数のdivを持つことは正しくないと予測でき、およびIDの目的を挑むでしょう。あなたはこれをしなかった場合:
$('.myDiv').fadeOut();
それはあなたが彼らにmyDivと固有のID(あるいはまったくなし)のクラスを与えると仮定すると、それらの両方をフェードアウトでしょう。
"注:私は、重複したIDを知っているが、基準に反している"
そして、それをしません。あなたは既に二つの問題を考え出しました。これは、基準に違反し、それはjQueryの(そして実際に、通常のDOMの)選択機構と干渉する。おそらく将来的にはより多くの問題があるでしょう。
恐らく、あなたは<全角> の私はそれに慣れて、誰かがあなたを助け願っていた場合には、間違ったfancyboxを、使用して。スクリプト自体は欠陥がある場合や悪いことに、あなたはそれを使用するべきではありません。
$(「#のmyDivは」)だけそのIDで最初のdivを返しますので、あなたはこのトリックを使用して、そのIDを持つすべての要素を見つける必要があります:
$('[id=myDiv]');
だから、あなたのケースのために、これらのdiv要素のすべてにフェードアウトを適用します:
$('[id=myDiv]').fadeOut();
そして、あなたはあなたのページが二回、このIDを持っていない、あなたはこれを行うことにより、余分なものを取り除くことができることを確認したい場合:
$('[id=myDiv]:gt(0)').remove();
また、検索()を使用してのルートを行くことができます。そのIDを持つすべての要素を返します見つけ、あなたが必要な場合は、特定の親に範囲を限定$(document).find('#myDiv').fadeOut();
ような何かを試すことができます。
または
$('.parentElement').find('#myDiv').fadeOut();
私は同じ問題に遭遇しました。どうやら、あなたはFancyboxを開きたい、そこからページのコンテンツを作成するとき、それは元のコンテンツのミラーのdivを作成します。私の場合、コントロールは、名前の作成しfancyboxのdivに包まれた、「fancy_div」
私はコントロールを選択し、セレクタの次の形式を使用して、それが値です取得することができた。
$( '#1 fancy_div [ID =のinputText]')のval();
あなたのコントロールがFancybox内の他の場所に存在してもよいです。行うための最善のことは、viewsourceを見ているが、それは難しいのです。
次のテクニックを使用し、ソースの表示を取得するには:
フォームにこのタグを配置します。
値を取得します。
あなたのフォームを開き、警告ウィンドウを開くために、タグをクリックしてください。
(コントロールを見つけてクリックします)カーソルがページのコンテンツ内にあることを確認してください。
右のコントロールの外にクリックして、「ソースの表示」を選択します。
div要素の束が存在するので、あなたのコンテンツが含まれているのdivを探します。
この情報がお役に立てば幸いです。
私は最近、同様の問題がありました。私はAjaxの負荷を介して異なるコンテンツを表示する単一のページを持っていました。 PDFの画像を生成するためにサーバをトリガーボタンがあります。
私の元の溶液がうまく働いたクラスセレクタを使用していたが、別の開発者との摩擦を引き起こしました。非常に多くのクラスは、識別子は、コードが醜い作ったとしてクラスを使用して、リンクにすでにありました。だから私は、name属性を使用します:
<a name="printButton"....
$('a[name="printButton"]').on('click',function(){....
ちょうどダンディ働いた!