【问题标题】:Append only once Jquery只追加一次Jquery
【发布时间】:2012-10-06 12:16:22
【问题描述】:

终于,我有了解决办法,但还是有点小问题。

我有这份清单

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

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

谢谢大家!

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

【问题讨论】:

  • more 不是布尔值。如果你想要干净的代码,它应该是。
  • @Rune 再看一遍。他正在使用more 来存储索引。
  • @Rune 在 JS 中检查非布尔值的真假是很常见的。
  • @m90 当然是,但我猜他指的是使用 1/0 代替真/假,这是一种不好的做法。但在这种情况下,more 用于存储整数。
  • @m90 正如马库斯所说,我指的是不良实践部分。我总是追求可读性和简洁的代码,这对我来说是一种强迫症,所以我总是使用 bool 和 bool 仅用于真/假检查。我认为每个人都应该这样做,因为它确实有助于提高可读性。

标签: jquery loops html-lists append


【解决方案1】:

我想说解决方案应该很简单:

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

【讨论】:

  • 是的,应该这样做。但是看到 var 名称中的下划线让我成为一只悲伤的熊猫。为什么不让它与原生 JS 保持一致,因为原生 JS 或多或少都是 camelCase 或 CamelCaps? :)(编辑:是的,我知道这是个人喜好问题)
  • @MarcusEkwall 您的评论很受欢迎...当我看到我也无法阅读的代码样式时,我个人感到很痛苦...但是,作为 PHP 编码员,我已经习惯了约定,所以我也在 JavaScript 中使用它......虽然很抱歉让你成为一个悲伤的熊猫
  • 我猜这就是它的来源。邪恶的PHP! ;) 根据我自己的经验,它实际上帮助我通过尽可能地遵循它们自己的规范和样式指南(css/html 中的破折号分隔、JavaScript 中的驼峰式/CamelCaps、PHP 中的下划线等)来保持语言和语法的区别,但是显然,这并不适用于所有人!它还有一个额外的好处,那就是在有多个开发人员的大型项目中更容易使用,因为没有人真的可以反对它:)
猜你喜欢
  • 1970-01-01
  • 2017-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多