ฉันเขียนโค้ดที่เลือกinput type=text
องค์ประกอบทั้งหมดโดยทั่วไปดังนี้:
$('.sys input[type=text]').each(function () {}
ฉันจะเปลี่ยนเป็นเลือกinput[type=text]
หรือselect
?
ฉันเขียนโค้ดที่เลือกinput type=text
องค์ประกอบทั้งหมดโดยทั่วไปดังนี้:
$('.sys input[type=text]').each(function () {}
ฉันจะเปลี่ยนเป็นเลือกinput[type=text]
หรือselect
?
คำตอบ:
การใช้ตัวเลือก css ปกติ:
$('.sys input[type=text], .sys select').each(function() {...})
หากคุณไม่ชอบการทำซ้ำ:
$('.sys').find('input[type=text],select').each(function() {...})
หรือกระชับกว่านั้นให้ส่งผ่านcontext
ข้อโต้แย้ง:
$('input[type=text],select', '.sys').each(function() {...})
หมายเหตุ: ภายในjQuery
จะแปลงข้างต้นเป็นfind()
เทียบเท่า
บริบทตัวเลือกจะถูกใช้งานด้วยเมธอด. find () ดังนั้น $ ('span', this) จึงเทียบเท่ากับ $ (this) .find ('span')
ฉันเองพบว่าทางเลือกแรกที่อ่านได้มากที่สุด :) ของคุณ
$
โทรมีความสำคัญต่อแอปของคุณโปรดหลีกเลี่ยงการใช้ jQuery โดยสิ้นเชิง :) คำตอบนี้พยายามตอบคำถามของ OP หากเป็นคำถามเกี่ยวกับประสิทธิภาพคำตอบนี้จะไม่อยู่ที่นี่ตั้งแต่แรก ขอบคุณสำหรับความคิดเห็น :) ขอขอบคุณ
$
โทรเพียงครั้งเดียวแต่เกี่ยวกับการ$
โทรทั้งหมดที่มีอยู่ในเสียงปรบมือเดียว IMO เมื่อคุณมีวิธีต่างๆในการทำสิ่งเดียวกันฉันจะพยายามเลือกวิธีที่มีประสิทธิภาพดีกว่าเสมอ slow performance
=== unhappy users
. นอกจากนี้เรายังสามารถทั้งตอบคำถามของ OP ที่มีคำตอบหลาย ๆ (ตามที่คุณได้) และข้อได้เปรียบที่มีให้ / ไม่สะดวกของแต่ละของพวกเขา (ที่ผมทำในความคิดเห็น) IMO เป็นสิ่งสำคัญที่จะต้องสังเกตว่าทำไมคำตอบทั้งหมดจึงแตกต่างกันในขณะที่ให้ผลลัพธ์เดียวกัน นอกจากนี้เรายังสามารถเขียนโค้ดวานิลลา JavaScript ที่ทำงานช้าได้: JavaScript
! ==performance
$
จัดประเภท div ของคุณโดยเฉพาะและใช้document.getElemenById/ElementsByClassName
แทนที่จะดำเนิน$
การตรวจสอบ / แยกวิเคราะห์สตริงของตัวเลือกของคุณเป็นจำนวนมาก jQuery ไม่ได้มีชื่อเสียง สำหรับไลบรารีนักแสดง และฉันไม่เคยเห็นว่าแอปทำงานช้าลงเนื่องจากมีการโทรหาแอป$
มากเกินไปหากคุณมีเว็บไซต์ที่มีปัญหาโปรดแสดงให้ฉันเห็นฉันสนใจมาก :)
$('.sys').children('input[type=text], select').each(function () { ... });
แก้ไข: อันที่จริงรหัสข้างต้นนี้เทียบเท่ากับตัวเลือกลูก ๆ.sys > input[type=text]
หากคุณต้องการให้ลูกหลานเลือก ( .sys input[type=text]
) คุณต้องใช้ตัวเลือกที่กำหนดโดย @NiftyDude
ข้อมูลมากกว่านี้:
chilren
แทนchildren
หากคุณมีอินพุตหลายรายการเป็นข้อความในรูปแบบหรือตารางที่คุณต้องวนซ้ำฉันทำสิ่งนี้:
var $list = $("#tableOrForm :input[type='text']");
$list.each(function(){
// Go on with your code.
});
สิ่งที่ฉันทำคือฉันตรวจสอบแต่ละอินพุตเพื่อดูว่าประเภทถูกตั้งค่าเป็น "ข้อความ" หรือไม่จากนั้นมันจะคว้าองค์ประกอบนั้นและเก็บไว้ในรายการ jQuery จากนั้นมันจะวนซ้ำผ่านรายการนั้น คุณสามารถตั้งค่าตัวแปรชั่วคราวสำหรับการวนซ้ำปัจจุบันได้ดังนี้:
var $currentItem = $(this);
สิ่งนี้จะตั้งค่ารายการปัจจุบันเป็นการวนซ้ำปัจจุบันของคุณสำหรับแต่ละลูป จากนั้นคุณสามารถทำอะไรก็ได้ที่คุณต้องการด้วยตัวแปร temp
หวังว่านี่จะช่วยทุกคน!
$('input[type=text],select', '.sys');
สำหรับการวนซ้ำ:
$('input[type=text],select', '.sys').each(function() {
// code
});
context form
มีการใช้find form
ที่find form
มีประสิทธิภาพมากขึ้นกว่าcontext form
(ฟังก์ชั่นการโทรหนึ่งหลีกเลี่ยง) ใช้ได้กับตัวเลือกที่ใช้เกือบทั้งหมด จากนั้น IMOfind form
จะมีประสิทธิภาพมากกว่าnormal CSS selector
เนื่องจากทั้งสองส่วนของตัวเลือกนั้นสัมพันธ์กับโหนดรูทโดยที่ในส่วนfind form
นั้นมีเพียง.sys
ส่วนที่สัมพันธ์กับมันจากนั้นinput[type=text],select
จะถูกดำเนินการกับชุดองค์ประกอบที่เล็กกว่ามากดังนั้นจึงอาจเร็วกว่า (แต่จำเป็นต้องตรวจสอบโดยการทดสอบ)