如何正确地做JS条件?

时间:2012-12-03 09:24:38

标签: javascript jquery

我运行此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但仍然进入块。

我做错了什么?

更新

我的错误是我将#添加到了错误的位置......

2 个答案:

答案 0 :(得分:2)

您不得拥有多个具有相同ID的元素。在这种情况下,jQuery只占第一位。

要证明这有HTML:

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

然后这段代码:

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

Test case

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

答案 1 :(得分:2)

尝试将if stmt内的提醒设为alert($(sidebar_id).length)

div追加到$("#sidebar_content")

是错误的

其中sidebar_id类似于#test sidebar_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>'); }符号是id)的必需品。

您的代码会像

一样
{{1}}

更改为

{{1}}

然后再试一次。