与.closest()混淆.siblings()。find()

时间:2012-08-10 22:47:53

标签: javascript jquery

我有这段代码:

<div id="wrapf">

<div class="dropsf">
  <select name="f" class="food">
    <option value="" rel="">Choose!</option>
    <option value="1" rel="2">1</option>
    <option value="3" rel="6">2</option>
    <option value="7" rel="14">3</option>
  </select>
</div>

<div class="serve">
 <button id="plus">+</button>
 <input id="srv" name="srv" class="srv" type="text" value="1" size="2" readonly="readonly"/>
 <button id="minus">-</button>
</div>

</div><!-- #wrapf -->

我在上面的代码中添加了一些<div>之前有了这段代码(出于对齐和CSS的原因):

var food = $(".food"),
    cc = [],
    gc = [];

    //Push values into an array.
for(var i = 0; i < food.length; i++) {
  var v = food.eq(i).find('option:selected').val();
  var m = food.eq(i).siblings('input[name=srv]').val();
    gc.push(food.eq(i).find('option:selected').attr('rel'));
    cc.push(v * m); 
 }

但是现在我的javascript无法运行,而且我对如何从下拉列表中获取值感到困惑...(我追加每一个下拉,这就是我使用for语句的原因),我的v变量很好,gc.push语句正常,但我的m变量没有注册。我正在尝试从serving输入中获取值,我该怎么做?

PS。我也试过.find()

3 个答案:

答案 0 :(得分:3)

input[name=srv]不是.food的兄弟姐妹。另外,为了循环jQuery对象,我建议使用.each

var food = $(".food"),
    cc = [],
    gc = [];

food.each(function(){
    var $this = $(this),
        // you can just get the val of the select
        val = $this.val(),
        // this is the same as $(this).find('option:selected')
        option = $('option:selected', this),
        // or even simpler: $('#srv').val();
        inputVal = $this.parent('.dropsf').siblings('.serve').find('input[name=srv]').val();
    gc.push(option.attr('rel'));
    cc.push(val * inputVal);
});

答案 1 :(得分:2)

food.closest('#wrapf').find('input[name=srv]').val()

应该有效

答案 2 :(得分:1)

ID不唯一吗?那不应该这样吗?

$("#srv").val()

顺便说一下,你不需要这样做:

var v = food.eq(i).find('option:selected').val();

你可以这样做(如果你有多种食物):

var v = food.eq(i).val();

val()已为您提供当前选定的值。