我运行此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但仍然进入块。
我做错了什么?
更新
我的错误是我将#
添加到了错误的位置......
答案 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());
如果您需要迭代多个元素,请使用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}}
然后再试一次。