Cách nhận tất cả các đầu vào con của một phần tử 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>

Tôi cần phải chọn tất cả các đầu vào trong div cụ thể.

Điều này không hoạt động:

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

Câu trả lời:


301

Sử dụng nó mà không lớn hơn:

$("#panel :input");

Các >phương tiện chỉ trực tiếp con của phần tử, nếu bạn muốn tất cả trẻ em cho dù độ sâu chỉ cần sử dụng một khoảng trắng.


3
Thật thú vị ... Bây giờ tôi đang bối rối ... Cái :này dành cho các lớp giả, phải không? Nhưng chúng tôi muốn chọn một loại phần tử. Tại sao :?
mnemosyn

11
@mnemosyn - Đây là một loại công cụ chọn khác như `: hộp kiểm 'là, xem tại đây để biết chi tiết: api.jquery.com/input-selector Và đây là danh sách đầy đủ hơn về những điều này: api.jquery.com/carget/selector/form -selector
Nick Craver

74

Bạn cần

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

hoặc , tùy thuộc vào chính xác những gì bạn muốn (xem bên dưới)

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

ý >chí hạn chế cho trẻ em, bạn muốn tất cả con cháu.

EDIT: Như Nick đã chỉ ra, có một sự khác biệt tinh tế giữa $("#panel input")$("#panel :input).

Cái đầu tiên sẽ chỉ lấy các phần tử của kiểu đầu vào, nghĩa là <input type="...">, nhưng không <textarea>, <button><select>các phần tử. Cảm ơn Nick, tôi đã không biết điều này và sửa bài viết của tôi cho phù hợp. Còn lại cả hai tùy chọn, vì tôi đoán OP cũng không biết điều đó và - về mặt kỹ thuật- đã yêu cầu đầu vào ... :-)


Vì vậy ,: đầu vào sẽ chọn tất cả các trường đầu vào / select / textarea? Tất cả trong một?
Yuri

Về cơ bản, có. Công cụ chọn trả về một loạt các kết quả khớp, vì vậy tôi đoán bạn có thể nói nó thực hiện "ngay lập tức", mặc dù tôi không hoàn toàn chắc chắn ý của bạn là gì ...
mnemosyn

1
Ý tôi là, "tất cả cùng nhau" chỉ với bộ chọn đó. ": bộ chọn đầu vào Mô tả: Chọn tất cả các yếu tố đầu vào, textarea, select và nút." Không biết về nó, tôi sẽ sử dụng nó từ bây giờ :)
Yuri

50

Phương pháp 'find' có thể được sử dụng để lấy tất cả các đầu vào con của một container đã được lưu vào bộ nhớ cache để lưu lại tìm kiếm nó (trong khi phương thức 'trẻ em' sẽ chỉ nhận được các con ngay lập tức). ví dụ

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

5
Điều này là hoàn hảo đối với tôi - Tôi đang lặp qua các phần tử bằng cách sử dụng .each () có nghĩa là trong vòng lặp tôi đang truy cập vào phần tử hiện tại bằng cách sử dụng $ (this). Kết quả là, tôi không thể thực hiện nhiều điều được đề xuất khác trong các câu trả lời. - Thay vào đó tôi có thể làm $ (this) .find ("input"); Cảm ơn.
djbp

29

Nếu bạn đang sử dụng một khung như Ruby on Rails hoặc Spring MVC, bạn có thể cần sử dụng div với dấu ngoặc vuông hoặc ký tự khác, không cho phép bạn có thể sử dụng document.getElementByIdvà giải pháp này vẫn hoạt động nếu bạn có nhiều đầu vào cùng loại.

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');
});

Ví dụ này cho thấy cách xóa đầu vào, ví dụ bạn sẽ cần thay đổi nó.


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

nên làm việc :-)

> sẽ chỉ tìm nạp trẻ em trực tiếp, không có trẻ em nào
: dành cho việc sử dụng các lớp giả, vd. : di chuột, v.v.

bạn có thể đọc về các bộ chọn css có sẵn của các lớp giả ở đây: http://docs.jquery.com/DOM/Traversing/Selector#CSS_Selector


6
@henchman - :inputcũng là một công cụ chọn, api.jquery.com/carget/selector/form-selector Nếu anh ta có một <textarea>nút hoặc inputsẽ không tìm thấy nó :input, vì vậy sẽ có một sự khác biệt.
Nick Craver

+1, vì vậy bỏ đi> sẽ thực hiện thủ thuật. bây giờ tôi cũng tìm thấy nó trên trang tôi đề nghị ....
Phil Rykoff

9

đây là cách tiếp cận của tôi:

Bạn có thể sử dụng nó trong sự kiện khác.

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>

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.