仅添加一次Jquery

时间:2012-10-16 11:45:33

标签: jquery loops html-lists append

最后,我有我的解决方案,但仍有一点问题。

我有这个清单

<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">。 怎么预防这个?我怎样才能只追加一次(在页面加载时,即)这个元素?

感谢所有人!

小提琴:http://jsfiddle.net/MYM2C/

1 个答案:

答案 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();
}