gpt4 book ai didi

javascript - 根据存在的变量将多个选择器分配给变量

转载 作者:行者123 更新时间:2023-11-30 13:07:27 24 4
gpt4 key购买 nike

我正在遍历一个容器并寻找可能存在的元素。如果其中一个元素存在,我想将该元素的 jQuery 对象分配给一个变量。我有一个解决方案,但我不确定这是否是解决问题的好方法。

HTML

<form>
<div>
<label>First name</label>
<input type="text"/>
</div>

<div>
<label>last name</label>
<input type="text"/>
</div>

<div>
<label>location</label>
<select>
<option>USA</option>
</select>
</div>
</form>

JS

$(document).ready(function(){
var testNum = $('form').find('label').length;
for(var i=0; i<testNum; i++) {
var currentTest = $('form').find('label').eq(i).parent().find('input').length ? $('form').find('label').eq(i) : false || $('form').find('label').eq(i).parent().find('select').length ? $('form').find('label').eq(i) : false;
$('html').append(currentTest.text() + '<br/>');
}
});

编辑:更新的 fiddle 和问题

http://jsfiddle.net/PMtZB/1/

最佳答案

您的循环方式效率低下。你应该使用 .each()方法,像这样:

$('form').find('label').each(function() {
var $label = $(this); // $label is a jQuery object that refers to the label element.


...
});

您这样做的方式是反复调用 .find()对于同一个选择器。

问题编辑后更新:

首先要做两件事:

  1. 如果您用文字而不只是代码来说明您想要的元素,那将会很有帮助。我假设你想要所有 <label>后跟 <input> 的元素或 <select> .
  2. 你应该使用括号。我查了一下,逻辑或运算符的优先级高于条件运算符,而且条件运算符具有从右到左的结合性。我认为您需要添加括号,以便您的语句如下所示:(c1 ? a1 : a2) || (c2 ? b1 : b2) .没有括号,你有相当于 c1 ? a1 : ((a2 || c2) ? b1 : b2) .

您可以尝试添加 K D 建议的内容并连接一个 jQuery 包装集:

$(document).ready(function() {

var $matchingLabels = $();

$('form').find('label').each(function() {
var $label = $(this);
if ($label.next().is('input, select')) {
$matchingLabels.add($label);
}
});

// At this point $matchingLabels holds the labels you want.
});

您也可以尝试使用“prev + next”选择器:

$(document).ready(function() {

var $matchingLabels = $('form').find('label + input, label + select').prev();

});

当然,如果您不能假设 <input><select>元素总是紧跟在 <label> 之后元素,您将不得不选择第一个选项并修改 if 语句。

关于javascript - 根据存在的变量将多个选择器分配给变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15163541/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com