一次执行一项功能,优先考虑一项

时间:2015-12-15 10:36:01

标签: javascript jquery

我想运行代码。

function myfunc() {
    $("div[id='zeus']")
        .find('a')
        .each(function() {
            if ($(this)
                .text() == "Hey Start") {
                $(this)[0].click();
            }
            else if ($(this)
                .text() == "Refresh") {
                $(this)[0].click();
            }
        });
}
var fill= setInterval(myfunc, 2000)

我希望上面的代码在html页面上运行,它有2个链接,

1)嘿开始

2)刷新

我希望代码每2秒按一次“刷新”链接(现在“Hey Start”链接不存在)。由于点击了Refresh链接,会出现“Hey Start”链接。现在的问题是上面的代码从现在开始同时点击这两个链接。我想在“Hey Start”链接出现后立即停止“刷新”。

可以吗?请出示。

2 个答案:

答案 0 :(得分:0)

这是因为您正在迭代a中找到的每个#zeus ...

因此,如果您点击了一个链接而又不想点击其他链接,则必须以某种方式跳出each - 循环。

通过返回false来打破它,就像在文档页面上一样:http://api.jquery.com/jquery.each/满足某些条件时。例如。将data添加到一个链接或添加class

简单的解决方案:

function myfunc() {
    $("div[id='zeus']")
        .find('a')
        .each(function() {
            if ($(this)
                .text() == "Hey Start") {
                $(this)[0].click();
                return false;
            }
            else if ($(this)
                .text() == "Refresh") {
                $(this)[0].click();
                return false;
            }
        });
}
var fill= setInterval(myfunc, 2000)

答案 1 :(得分:0)

如果您要处理多个元素,但只需要根据选项执行一个元素,那么您可以

function myfunc() {
  var array = ['Hey Start', 'Refresh'];
  array.some(function(text) {
    var $el = $("#zeus").find('a:contains("' + text + '")');
    if ($el.length) {
      $('#result').html('clicking on: ' + $el.text())
      $el[0].click();
      return true;
    }
  })
}
var fill = setInterval(myfunc, 2000)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="zeus">
  <a>Refresh</a>
</div>
<button onclick="$('#zeus').append('<a>Hey Start</a>')">Start</button>
<button onclick="$('#zeus a:contains(\'Hey Start\')').remove()">Remove</button>
<div id="result"></div>

由于您希望根据优先级处理锚元素,因此您需要定义一个,因为在您的情况下它基于文本内容,这里我们使用的数组具有基于其优先级的有序文本列表。因此,如果有一个带有文本的锚在数组中,那么该锚将在一个锚之后处理,该锚的文本在此之后。

这里的实现遍历数组并检查是否存在具有给定文本的锚点,如果是,则触发该元素的click事件,并返回true,以便之后没有任何元素处理当前项目(See Array.some()