-2

このjQuery(1.8.3)コードを実行すると、長さが1より大きい場合でも、常に「in」アラートが表示されます。

私がやっていることは、メニューに要素を動的に追加することです。ifは、この要素がまだ存在しないことを確認することです。

私も試してみ== 0まし=== 0たが、結果は同じです...

これがJSフィドルです:http://jsfiddle.net/mHhwq/4/

$(".sidebarit a.olink").click(function(event){
   iframe_url = $(this).attr("href");
   sidebar_id = '#' + iframe_url.replace(/[/.]/g, '');
   alert('sidebar_id: ' + sidebar_id);

   // create the sidebar if it doesn't exist
   if ($(sidebar_id).length < 1) {
      alert("in");
      $("#sidebar_nav ul").append('<li></li>');
      $("#sidebar_content").append('<div id="' + sidebar_id + '" style="display:none;"></div></div>');
   } else { alert("out"); }

   // don't follow the link
   event.preventDefault();
});

FireBugでは、長さが1に等しいことがわかりますが、それでもブロックに入ります。

私は何が間違っているのですか?

アップデート:

私の間違いは#、間違った場所にを追加したことでした...

4

2 に答える 2

2

同じIDを持つ要素を複数持つことはできません。このような場合、jQueryは最初のものを取ります。

これがそのようなHTMLを持っていることを証明するために:

<div id="mydiv">hello</div>
<div id="mydiv">world</div>

次に、このコード:

var myDiv = $("#mydiv");
alert("length: " + myDiv.length + ", contents: " + myDiv.html());​

テストケース

繰り返す必要のある要素が複数ある場合は、代わりにクラスを使用するか、サイドバーごとに一意のIDを設定し、クリックした要素に最も近いIDを取得してください。

于 2012-12-03T09:40:07.373 に答える
2

if stmtとしてアラートを内部に配置してみてくださいalert($(sidebar_id).length)

divそして、あなたはにを追加する際に間違いを犯してい$("#sidebar_content")ます。

fromのsidebar_idようなものはどこにあり、そこのように追加する必要があります(idには記号は必要ありません)。#testsidebar_id = '#' + iframe_url.replace(/[/.]/g, '');<div id= "#test"<div id= "test"#

コードは次のようになります

$("#sidebar_content").append('<div id="#test" style="display:none;"></div></div>');

への変更

$("#sidebar_content").append('<div id="test" style="display:none;"></div></div>');

その後、再試行してください。

于 2012-12-03T09:43:31.340 に答える