-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());​

测试用例

如果您有多个元素需要迭代,请改用 class,或者确保每个侧边栏都有唯一的 ID,并采用最接近单击元素的 ID。

于 2012-12-03T09:40:07.373 回答
2

尝试将 alert放入if stmt.alert($(sidebar_id).length)

div而且您在附加to 时犯了一个错误$("#sidebar_content")

来自哪里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 回答