jQuery $(this)输入的第一个子选择

时间:2013-11-08 20:52:36

标签: jquery iteration each css-selectors

我总是使用tempClass来迭代某些内容并选择第一个子文本输入。我现在遇到了奇怪的问题。我一直在寻找,但没有成功找到正确的方法。

代码段

$( ".inputQuantityUpdate" ).each(function( index ) {
    $(this).addClass("tempPtr");
    completed   = $(".tempPtr :input[type='text']:first").val();
    nc          = $(".tempPtr :input[type='text']:first").next().val();
    if(nc == "NC")nc = 0;
    $(this).removeClass("tempPtr");
    $(this).parent().remove();
});

我的问题是nc并且第一次迭代完成是正确的,但不是之后。 由于某种原因,这是行不通的。解决这个问题的最佳方法是什么?

更新: 标记的解决方案有效。我应该发布我抓住的其他字段,因为它们不起作用。当迭代中只有1个元素“inputQuantityUpdate”时,这组例程就可以工作。当有多个时,它会爆炸。我有一种感觉,这是我的某种内存问题/语法滥用。如果元素中存储了数据,那么最好的方法是:

function updatesConfirmed(){
        $("#confirmInputValues").remove();
        $( ".inputQuantityUpdate" ).each(function( index ) {
            job         = $(this).data("job");
            suf         = $(this).data("suff");
            op          = $(this).data("op");
            completed   = $(":input[type='text']:first", this).val();
            nc          = $(":input[type='text']:first", this).next().val();
            if(nc == "NC")nc = 0;
            $(this).parent().remove();
        });
    }

2 个答案:

答案 0 :(得分:0)

我假设您想从当前元素中获取第一个文本输入,在这种情况下,您的选择器将更改为:

completed   = $(":input[type='text']:first", this).val();
nc          = $(":input[type='text']:first", this).next().val();

答案 1 :(得分:0)

我假设您只是使用tempPtr来访问每个循环中的循环元素。如果是这种情况,您可以在$(this)上使用.filter代替。

试试这个:

$( ".inputQuantityUpdate" ).each(function( index ) {
    completed = $(this).filter(":input[type='text']:first").val();
    nc = $(this).filter(":input[type='text']:first").next().val();
    if (nc == "NC") nc = 0;
    $(this).parent().remove();
});