最后,我有我的解决方案,但仍有一点问题。
我有这个清单
<ul id="tricky_list">
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
<li>Item 5</li>
</ul>
我想只显示前三个(三个)元素,并在使用此功能的鼠标悬停时显示其余两个
var limit = 3;
var list = $("#tricky_list");
var more = 0;
function tricky_hide(){
var morec = 0;
$("li", list).each(function(index) {
if (index >= limit) {
$(this).hide();
morec = index - limit + 1;
}
});
if (!more) more = morec;
if (more) {
list.append('<li class="more">' + more + ' more</li>');
return true;
}
return true;
}
if (tricky_hide()) {
list.live("mouseover", function() {
$("li", list).each(function(index) {
$(this).show();
});
$("li.more", list).hide();
});
list.live("mouseout", function() {
tricky_hide();
});
}
它运作完美,但我需要一些澄清。 我有这个功能
if (more) {
list.append('<li class="more">' + more + ' more</li>');
return true;
}
也会在mouseout事件上附加<li class="more">
。如果我无限次地在这个元素上“mouseover”和“mouseout”,它会在我的html文档中写入无限<li class="more">
。
怎么预防这个?我怎样才能只追加一次(在页面加载时,即)这个元素?
感谢所有人!
答案 0 :(得分:3)
我会说解决方案应该像以下一样简单:
li_element = list.find('li.more');
if (more && !li_element.length) {
list.append('<li class="more">' + more + ' more</li>');
return true;
} else {
li_element.show();
}