我想运行代码。
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”链接出现后立即停止“刷新”。
可以吗?请出示。
答案 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())