脚本相互冲突 - JavaScript

时间:2014-07-06 18:29:20

标签: javascript jquery html

我有一个页面,基本上是一个div列表;它们的结构并不重要,只要说它们默认都是可见的就足够了。页面上有一些按钮,可以通过java脚本对它们进行排序。例如,如果您单击按钮"完成",该页面仅显示包含代码的div

<div class="ended">complete</div>

如果你按下&#34;显示全部&#34;按钮,它返回显示所有。 (结构类似于

<div class="entry">
      <p>something</p>
      <div class="ended">complete</div> 
et cetera </div>

我最近决定添加一个新按钮,通过它们选择一个随机div。这一切都运作良好,除了当你试图在随机选择它们之后再次显示它们时,它不起作用。

我对JavaScript和JQuery(我从这里找到的脚本改编的随机脚本)并不是那么熟悉,所以我不会这样做。明白什么是错的。

这是(一个)排序脚本的代码:

$('#completed').click(function() {
    featureList.filter(function(item) {
        if (item.values().ended == "complete") {
            return true;
        } else {
            return false;
        }
    });
    return false;
});

这是&#34;显示所有&#34;的代码。按钮:

$('#filter-none').click(function() {
    featureList.filter();
    return false;
});

最后,这是&#34;随机&#34;的代码。按钮:

$(document).ready(function () {
  $('#random').click(function () {
    var E = document.getElementsByClassName("entry");
    var m = E.length;
    var n = parseInt(Math.random() * m);
    for (var i = m - 1; i >= 0; i--) {
      var e = E[i];
      e.style.display = 'none';
    }
    E[n].style.display = '';
  });
});

1 个答案:

答案 0 :(得分:0)

很难在不知道.filter函数内部发生什么的情况下给出答案,但根据您提供的内容可能会有效:

$('#random').click(function () {
    var entries = document.getElementsByClassName("entry");
    var numEntries = entries.length;
    var random = Math.floor(Math.random() * numEntries);

    var counter = numEntries;
    featureList.filter(function(item) {
        counter--;
        if (counter === random) {
            return true;
        } else {
            return false;
        }
    });
    return false;
}

我假设在其中返回false的元素.filter以某种方式隐藏。

由于'全部显示'和'仅显示已完成'正在运行,因此使用“仅显示已完成”方式隐藏“显示随机”中的错误元素应该有效。