Câu trả lời:
Sử dụng bộ chọn css thông thường:
$('.sys input[type=text], .sys select').each(function() {...})
Nếu bạn không thích sự lặp lại:
$('.sys').find('input[type=text],select').each(function() {...})
Hay ngắn gọn hơn, chuyển vào context
đối số:
$('input[type=text],select', '.sys').each(function() {...})
Lưu ý: Nội bộ jQuery
sẽ chuyển đổi những thứ trên thành find()
tương đương
Bên trong, ngữ cảnh bộ chọn được triển khai với phương thức .find (), vì vậy $ ('span', this) tương đương với $ (this) .find ('span').
Cá nhân tôi thấy giải pháp thay thế đầu tiên là dễ đọc nhất :), bạn mặc dù vậy
$
cuộc gọi quan trọng đối với ứng dụng của bạn, vui lòng tránh sử dụng jQuery hoàn toàn :). Câu trả lời này cố gắng trả lời câu hỏi của OP, nếu nó là một câu hỏi về hiệu suất, câu trả lời này sẽ không có ở đây ngay từ đầu. Dù sao cũng cảm ơn vì nhận xét :), đánh giá cao nó
$
cuộc gọi, mà là về tất cả các $
cuộc gọi hiện diện trong một ứng dụng. IMO, khi bạn có những cách khác nhau để thực hiện cùng một việc, tôi luôn cố gắng chọn cách thực hiện tốt hơn bc. slow performance
=== unhappy users
. Ngoài ra, chúng tôi vừa có thể trả lời câu hỏi của OP với nhiều câu trả lời (như bạn đã làm) vừa đưa ra những ưu điểm / bất tiện của từng câu hỏi đó (như tôi đã làm trong nhận xét). IMO điều quan trọng là phải lưu ý tại sao tất cả các câu trả lời đều khác nhau, trong khi cung cấp cùng một kết quả. Ngoài ra, chúng tôi có thể viết mã JavaScript vani hoạt động chậm JavaScript
:! ==performance
$
, hãy phân loại các div của bạn một cách cụ thể và sử dụng document.getElemenById/ElementsByClassName
, thay vì $
kiểm tra rất nhiều / phân tích chuỗi của bộ chọn của bạn, jQuery không nổi tiếng cho thư viện biểu diễn của nó. Và thành thật mà nói thì tôi chưa thấy ứng dụng nào chạy chậm lại vì gọi $
quá nhiều, nếu bạn có trang web nào gặp sự cố đó, vui lòng chỉ cho tôi, tôi rất quan tâm :)
$('.sys').children('input[type=text], select').each(function () { ... });
CHỈNH SỬA: Trên thực tế, đoạn mã trên tương đương với bộ chọn con .sys > input[type=text]
nếu bạn muốn con cháu select ( .sys input[type=text]
), bạn cần sử dụng các tùy chọn được cung cấp bởi @NiftyDude.
Thêm thông tin:
chilren
thay vìchildren
Nếu bạn có nhiều đầu vào dưới dạng văn bản trong một biểu mẫu hoặc một bảng mà bạn cần phải lặp lại, tôi đã làm điều này:
var $list = $("#tableOrForm :input[type='text']");
$list.each(function(){
// Go on with your code.
});
Những gì tôi đã làm là tôi kiểm tra từng đầu vào để xem liệu loại có được đặt thành "văn bản" hay không, sau đó nó sẽ lấy phần tử đó và lưu trữ trong danh sách jQuery. Sau đó, nó sẽ lặp lại qua danh sách đó. Bạn có thể đặt một biến tạm thời cho lần lặp hiện tại như sau:
var $currentItem = $(this);
Điều này sẽ đặt mục hiện tại thành lần lặp hiện tại của bạn cho mỗi vòng lặp. Sau đó, bạn có thể làm bất cứ điều gì bạn muốn với biến tạm thời.
Hy vọng điều này sẽ giúp bất cứ ai!
$('input[type=text],select', '.sys');
cho vòng lặp:
$('input[type=text],select', '.sys').each(function() {
// code
});
context form
đang sử dụngfind form
,find form
nên hiệu quả hơncontext form
(tránh một hàm gọi). Điều này hợp lệ cho hầu hết tất cả các bộ chọn được sử dụng. Sau đó, IMO cáifind form
hiệu quả hơnnormal CSS selector
, bởi vì cả hai phần của bộ chọn đều liên quan đến nút gốc, trong đófind form
, chỉ.sys
một phần là liên quan đến nó, sau đóinput[type=text],select
được thực thi trên một tập hợp phần tử nhỏ hơn nhiều nên có thể nhanh hơn (nhưng cần điều này cần được xác minh bằng các thử nghiệm)