0

我是 js 和 jquery 库的初学者。我想获得一组具有特定名称的输入字段,并验证输入。我的每个输入字段都有一个名称,如 NS[0]、NS[1] 等。字段总数必须由代码确定,因为这些字段是由 javascript 生成的。

我知道我可以让 jquery 像这样处理单个对象:

$("input[name=NS\\[0\\]]").val()<input type="text" name="NS[0]">.

但是,如何获得所有这些类似元素的数组,从 NS[0] 到 NS[x],其中 x 必须根据生成的字段数来确定?我已经有其他具有不同名称模式的字段共享同一个 css 类,所以使用类不是一个选项。这些框在特定的 div 区域中,但在同一区域中是其他输入字段,因此选择同一区域的所有输入框也将它们选中。

换句话说,在获取整个输入字段数组后,如何使用 jquery 检查每个输入字段的名称,以检查每个单独的名称?

由于我在由表 ID CNTR1 确定的区域中输入了各种名称的字段,因此我将使用$('#CNTR1 input'). 我还可以使用$("input[name=]"). 但是,我想做的是选择 下的所有内容$('#CNTR1 input'),然后对其名称运行循环,检查名称是否符合预定条件。我怎样才能做到这一点?

html代码:

<table class="table" id="cnservers">
<thead>
      <tr>
        <th>Type</th>
        <th>Preference</th> 
        <th>Value</th> 
        <th>Name</th> 
      </tr>
    </thead>
    <tr id="CNTR0"> 
    <td>CNAME</td><td><input type="text" name="CN_PREF[0]" value=""></td><td>
    <input type="text" name="CN_VAL[0]" value=""></td><td>
    <input type="text" name="CN_NAME[0]" value="">  
    <a class="btn btn-danger" onclick="DelField(this.id);" id="CN_D0" >
        <span class="btn-label">Delete  
    </span>
    </a>            
    <a class="btn btn-primary" onclick="addField('cnservers','CN',10);" id="CN_A0" >
        <span class="btn-label">Add     
    </span>     

    </td></tr>      
</table>

[1]: http://i.stack.imgur.com/bm0Jq.jpg
4

3 回答 3

1

试试这个

HTML

<table id="CNTR1">
  <tr>
   <td>CNAME</td>
   <td><input type="text" name="CN_PREF[1]" id="CN_IN[1]"></td>
   <td><input type="text" name="CN_VAL[1]"></td>
   <td><input type="text" name="CN_NAME[1]"></td>
  </tr>
</table>

JS

$(document).ready(function(){
   $("#CNTR1 input").each(function() { 
      console.log($(this).attr("name"));
      // Match With predetermined criteria      
   });

});

于 2013-07-25T16:59:55.940 回答
1

我肯定错过了什么。您是否有理由不能使用http://api.jquery.com/attribute-starts-with-selector/

$('#CNTR1').find('input[name^="NS"]')

关于,

但是,我想要做的是选择 $('#CNTR1 input') 下的所有内容,然后对其名称运行循环,检查名称是否符合预定标准。我怎样才能做到这一点?

$("#CNTR1 input").each(function(index, elem) { 
    var $elem = $(elem),
        name = $elem.attr('name');

    var nameMatchesCondition = true; // replace with your condition 
    if (nameMatchesCondition) {
        // do something!
    }   
});

编辑1:

嗯,id仍然是一个 html 元素的属性。所以你可以这样做$('[id^="CNTR1"]')......id元素的属性值不包含#. 它只是 css/jquery 选择器的一部分。使用属性样式选择器时,您不需要它。虽然我不能评论这件事的表现。

理想情况下,您要附加第二个类,例如js-cntr您创建的所有以 .id开头的元素CNTR。尽管不同的名称模式元素可能已经有一个类,但该类是用于样式的。没有阻止您纯粹为了通过 js 选择而附加自定义类。这是一个公认的事情,这就是为什么类名以 开头的原因js-,表示它纯粹是为了通过 js 使用来进行选择。

于 2013-07-25T19:42:53.453 回答
0

使用 jQuery 的.filter方法,带有过滤功能:

filterCritera = /^CN_NAME\[/; // or whatever your criteria is

var inputs = $('#CNTR0 input');

// you could also cache this filter in a variable
inputs.filter(function(index){
    return filterCritera.test(this.name);
}).css('background','red');

jsbin

您发布的标记不是您的问题中描述的标记(它不包含NS[0]),但您可以在上面的正则表达式中替换它。

于 2013-07-25T16:54:41.340 回答