1

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

我有这个清单

<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>​

我只想显示前 3(三)个元素,并使用此功能在鼠标悬停时显示剩余的两个

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;
        }

附加<li class="more">on mouseout 事件。如果我在这个元素上“mouseover”和“mouseout”无限次,它会写在我的 html 文档中<li class="more">。如何防止这种情况?我怎样才能只附加一次(在页面加载时,即)这个元素?

谢谢大家!

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

4

1 回答 1

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();
}
于 2012-10-16T11:48:59.937 回答