如何获取div元素的所有子输入(jQuery)


158

HTML:

<div id="panel">
  <table>
    <tr>
       <td><input id="Search_NazovProjektu" type="text" value="" /></td>
    </tr>
    <tr>
       <td><input id="Search_Popis" type="text" value="" /></td>
    </tr>
  </table>
</div>

我需要选择特定div中的所有输入。

这不起作用:

var i = $("#panel > :input");

Answers:


301

使用时不要大于:

$("#panel :input");

>方法仅直接元素的孩子,如果你希望所有的孩子,无论深度只需使用一个空间。


3
有趣的...现在我很困惑... :伪类的是,不是吗?但是我们要选择一个元素类型。为什么:呢?
mnemosyn

11
@mnemosyn-这是另一种选择器,如`:checkbox',请参见此处以了解详细信息:api.jquery.com/input-selector 这是这些的更完整列表:api.jquery.com/category/selectors/form选择器
尼克·

74

你需要

var i = $("#panel input"); 

,具体取决于您想要什么(请参见下文)

var i = $("#panel :input"); 

>会限制孩子,你希望所有的后裔。

编辑:正如尼克指出,$("#panel input")和之间存在细微的差异$("#panel :input)

第一个将只检索类型的输入,即元素<input type="...">,但不是<textarea><button><select>元件。谢谢尼克,我自己不知道这一点,因此相应地更正了我的帖子。留下两个选项,因为我想OP都不知道这两个选项,并且-在技术上要求输入... :-)


那么,:input将选择所有输入/选择/文本字段?一次全部?
尤里(Yuri)2015年

从本质上讲,是的。选择器返回一个匹配项数组,所以我想您可以说它“一次”完成,尽管我不太确定您的意思是什么……
mnemosyn 2015年

1
我的意思是,“一起”只是那个选择器。“:输入选择器说明:选择所有输入,文本区域,选择和按钮元素。” 不知道,我从现在开始将使用它:)
Yuri

50

'find'方法可用于获取已缓存的容器的所有子输入,以免再次查找(而'children'方法将仅获取直接子)。例如

var panel= $("#panel");
var inputs = panel.find("input");

5
这对我来说是完美的-我使用.each()遍历元素,这意味着在循环中我使用$(this)访问当前元素。结果,我无法执行答案中其他许多建议。-相反,我能够执行$(this).find(“ input”); 谢谢。
2013年

29

如果您使用的是诸如Ruby on Rails或Spring MVC之类的框架,则可能需要使用带有方括号或其他字符的div,这是不允许使用的,document.getElementById并且如果您有多个具有相同类型的输入,则此解决方案仍然有效。

var div = document.getElementById(divID);
$(div).find('input:text, input:password, input:file, select, textarea')
        .each(function() {
            $(this).val('');
        });
$(div).find('input:radio, input:checkbox').each(function() {
    $(this).removeAttr('checked');
    $(this).removeAttr('selected');
});

本示例说明如何清除输入,例如,您需要更改输入。


9
var i = $("#panel input");

应该管用 :-)

>将仅获取直接子级,而不会获取子级子级
:是用于使用伪类,例如。:hover等

您可以在此处了解伪类的可用CSS选择器:http : //docs.jquery.com/DOM/Traversing/Selectors#CSS_Selectors


6
@henchman- :input也是一个选择器,api.jquery.com/category/ selectors/ form- selectors 如果他有一个<textarea>或按钮input,找不到它,:input那么会有所不同。
尼克·克雷弗

+1,所以省略>就能解决问题。现在我还发现,我建议在页面上....
菲尔Rykoff

9

这是我的方法:

您可以在其他事件中使用它。

var id;
$("#panel :input").each(function(e){	
  id = this.id;
  // show id 
  console.log("#"+id);
  // show input value 
  console.log(this.value);
  // disable input if you want
  //$("#"+id).prop('disabled', true);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="panel">
  <table>
    <tr>
       <td><input id="Search_NazovProjektu" type="text" value="Naz Val" /></td>
    </tr>
    <tr>
       <td><input id="Search_Popis" type="text" value="Po Val" /></td>
    </tr>
  </table>
</div>

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.