我正试图了解jQuery,但我无法弄清楚普通数组与jQuery数组,以及DOM元素与jQuery元素。
所以这是我尝试做的一个例子。这个例子很简单,但我需要一些手握:-p所以我的要求会很冗长,希望答案反过来是描述性的。
我有两个<select>
下拉菜单,ID为#version
和#target
。
当我点击某个按钮时,我想在#target
中选择跟随的选项,其名称与{em> last-but-one 中的值相同{ {1}}。 (该项目将存在)
示例:#version
包含选项:a,b,c,x。 #version
有选项a,b,c,d,h,m。
我点击按钮。应该发生的是:
#target
中的最后一个选项:“c”#version
中找到具有相同名称的选项:第3个(即索引为2)#target
中的所选值设置为“c”之后的值,即“d”(第4个,索引3)Here's a fiddle with the example.
第一步,我想我想出来了:
#target
//旁注:为什么var latestVersion = $("#version option").get(-2).text;
有效但.text
无效?哦,.val()
返回一个DOM元素
//所以如何回到jQuery元素呢?
// .get()
有效,但看起来很丑陋
对于第2步,我尝试了这个:
$($("#version option").get(-2)).val()
但它不起作用。并且GOT比手动迭代搜索正确值的所有值更好。
第3步:??。
答案 0 :(得分:2)
如您所示,使用第一步尝试以下操作:
$('#button').click(function(){
var latestVersion = $("#version option").get(-2).text;
//index of LAST-BUT-ONE
var target=$("#target option[value="+latestVersion+"]").index();
//Setting next index value
$("#target").prop("selectedIndex",target + 1);
});
答案 1 :(得分:1)
.val()不适用于选项元素,但它适用于选择元素:
var v = $( "#version" ).val();
为您提供在下拉列表中选择的元素#version。
以下行不会执行您想要的操作:
var target = $("#target option:contains(latestVersion)");
这是因为latestVersion被视为值“latestValue”而不是变量的名称。要使用变量latestValue的值,请将latestValue放在字符串之外,如:
... contains(" + latestVersion + ")...
您可能对jQuery方法.next()与步骤2中的代码结合感兴趣,以获取下一个选项元素的值。请注意,如果没有下一个元素,则该值将为“未定义”。
答案 2 :(得分:1)
您可以使用nth-child
选择version
的值并使用此方式设置target
的值:
$('#button').click(function(){
var latestVersion = $("#version option:nth-child(3)").text();
$("#target").val($('#target option[value="'+latestVersion+'"]').next().text());
});
演示Fiddle
答案 3 :(得分:0)
我不确定我是否理解你在寻找,但我认为你想要这样的东西:
$('#button').click(function(){
var arrVersion = $("#version option");
var latestVersion = $(arrVersion[arrVersion.length - 2]).val();
$("#target").val(latestVersion);
var actualSelected = parseInt($("#target").prop("selectedIndex"));
$("#target").prop("selectedIndex", actualSelected + 1);
});