วิธีรับอินพุตย่อยทั้งหมดขององค์ประกอบ 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");

คำตอบ:


301

ใช้มันโดยไม่ต้องยิ่งใหญ่กว่านี้

$("#panel :input");

>หมายถึงเฉพาะโดยตรงเด็กขององค์ประกอบถ้าคุณต้องการที่เด็กทุกคนไม่ว่าระดับความลึกเพียงแค่ใช้พื้นที่


3
ที่น่าสนใจ ... ตอนนี้ฉันสับสน ... :สำหรับ pseudo-classes ใช่ไหม? แต่เราต้องการเลือกประเภทองค์ประกอบ ทำไม:?
mnemosyn

11
@mnemosyn - นี่คือประเภทของตัวเลือกเช่น `อื่น: ช่องทำเครื่องหมาย' จะดูที่นี่สำหรับรายละเอียด: api.jquery.com/input-selector และนี่เป็นรายการที่สมบูรณ์ของเหล่านี้: api.jquery.com/category/selectors/form -selectors
Nick

74

คุณต้องการ

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

หรือขึ้นอยู่กับสิ่งที่คุณต้องการ (ดูด้านล่าง)

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

>จะ จำกัด ให้กับเด็กที่คุณต้องการลูกหลาน

แก้ไข: ในฐานะที่เป็นนิคชี้ว่ามีความแตกต่างที่ลึกซึ้งระหว่างและ$("#panel input")$("#panel :input)

คนแรกที่จะดึงองค์ประกอบของประเภทการป้อนข้อมูลที่เป็น<input type="...">แต่ไม่ได้<textarea>, <button>และ<select>องค์ประกอบ ขอบคุณ Nick ไม่รู้จักตัวเองและแก้ไขโพสต์ของฉันตามนั้น ออกจากตัวเลือกทั้งสองเพราะฉันเดาว่า OP ไม่ได้ตระหนักถึงสิ่งนั้นและ -technically- ถามถึงอินพุต ... :-)


ดังนั้น: อินพุตจะเลือกฟิลด์อินพุต / เลือก / textarea ทั้งหมดหรือไม่ ทุกอย่างในครั้งเดียว?
ยูริ

เป็นหลักใช่ ตัวเลือกส่งคืนอาร์เรย์ของการแข่งขันดังนั้นฉันคิดว่าคุณสามารถพูดได้ว่ามัน 'ทันที' แม้ว่าฉันไม่แน่ใจว่าคุณหมายถึงอะไรโดย ...
mnemosyn

1
ฉันหมายถึง "ทั้งหมดเข้าด้วยกัน" ด้วยตัวเลือกนั้น ": ตัวเลือกอินพุตคำอธิบาย: เลือกองค์ประกอบอินพุตข้อความพื้นที่เลือกและองค์ประกอบทั้งหมดของปุ่ม" ไม่ทราบว่าเกี่ยวกับเรื่องนี้ผมจะใช้มันต่อจากนี้ :)
ยูริ

50

วิธีการ 'พบ' สามารถนำมาใช้จะได้รับปัจจัยการผลิตลูกทั้งหมดของภาชนะที่ได้ถูกเก็บไว้ชั่วคราวเพื่อประหยัดมองมันขึ้นมาอีกครั้ง (ในขณะที่วิธีการที่ 'เด็ก' จะได้รับเด็กทันที) เช่น

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

5
นี้เป็นที่สมบูรณ์แบบสำหรับฉัน - ฉันกำลังวนลูปกับองค์ประกอบโดยใช้ .each () ซึ่งหมายความว่าภายในห่วงฉันกำลังเข้าถึงองค์ประกอบปัจจุบันใช้ $ (นี้) เป็นผลให้ฉันไม่สามารถทำสิ่งที่แนะนำในคำตอบได้มากมาย - แต่ฉันสามารถทำ $ (นี่) .find ("อินพุต"); ขอบคุณ
djbp

29

หากคุณกำลังใช้กรอบเช่น Ruby on Rails หรือฤดูใบไม้ผลิ MVC คุณอาจจำเป็นต้องใช้ divs กับตารางการจัดฟันหรือตัวอักษรอื่น ๆ ที่ไม่ได้รับอนุญาตให้คุณสามารถใช้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");

ควรทำงาน :-)

> การจะดึงเด็กโดยตรงเด็กเด็กไม่มี
ที่สำหรับใช้หลอกชั้นเรียนเช่น : เลื่อน ฯลฯ

คุณสามารถอ่านเกี่ยวกับ css-selectors ของ pseudo-classes ที่มีอยู่ได้ที่นี่: http://docs.jquery.com/DOM/Traversing/Selectors#CSS_Selectors


6
@henchman - :inputเป็นตัวเลือกเช่นกันapi.jquery.com/category/selectors/form-selectorsถ้าเขามี<textarea>ปุ่มหรือinputจะไม่พบมัน:inputจะเพื่อให้มีความแตกต่าง
Nick Craver

+1 เพื่อให้ออกจาก> จะทำเคล็ดลับ ตอนนี้ฉันยังพบมันในหน้าฉันแนะนำ ....
Phil 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>

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.