我有问题,试图让下拉循环到下一个选项,其中有一个数据完成=假
<select id="selectionChamp">
<optgroup label="1">
<option data-completed=true selected>Text 1</option>
</optgroup>
<optgroup label="2">
<option data-completed=true>Text 2</option>
</optgroup>
<optgroup label="3">
<option data-completed=true>Text 3</option>
</optgroup>
<optgroup label="45">
<option data-completed=false>Text 4</option>
<option data-completed=false>Text 5</option>
</optgroup>
</select>
<input type="button" id="fieldNext" value="Next">
JavaScript:
$("#fieldNext").click(function() {
var $selected = $("option:selected");
var filter = "[data-completed!=true]";
$selected.attr("data-completed", true).prop("selected", false);
var $next = $selected.next("option"+ filter);
if ($next.length === 0) {
$next = $selected.parent("optgroup").next("optgroup:has(option"+ filter+")").find("option"+ filter+":first");
}
$next.prop("selected", true);
});
参见:http://jsfiddle.net/w9kcd/105/
我得到它的作品时filter = "";
但不是当filter = "[data-completed!=true]";
它应该从1开始,跳到4,然后跳到5,跳过2和3。
1条答案
按热度按时间lstz6jyr1#
next
方法只选择元素的下一个直接兄弟元素。如果你给它传递一个过滤器,它会选择下一个直接的兄弟,只有当它匹配指定的选择器时。直到找到匹配的元素才执行。另一种方法是nextAll
,它可以做到这一点,但下一个目标元素不是起始元素的兄弟元素。您可以从所选元素的父元素开始,然后使用:has
选择器查找具有预期子元素的optgroup
,但更好/更有效的选择是:Here你可以在jsfiddle.net上找到一个演示。