2012-05-18 30 views
75

Tôi đã viết một mã mà về cơ bản sẽ chọn tất cả input type=text yếu tố như thế này:Jquery chọn đầu vào [type = text] ')

$('.sys input[type=text]').each(function() {} 

Làm thế nào để thay đổi nó để chọn input[type=text] hoặc select?

Trả lời

136

Sử dụng css selector bình 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() {...}) 

Hoặc chính xác hơn, vượt qua trong lập luận context:

$('input[type=text],select', '.sys').each(function() {...}) 

Lưu ý: Nội bộ jQuery sẽ chuyển đổi nội dung trên thành find() tương đương

http://api.jquery.com/jQuery/

Bên trong, bối cảnh selector được thực hiện với phương pháp .find(), nên $ ('tuổi', điều này) là tương đương với $ (this) .find ('tuổi').

Cá nhân tôi tìm ra sự thay thế đầu tiên là có thể đọc được hầu hết :), mất của bạn mặc dù

+0

Vì 'dạng ngữ cảnh' đang sử dụng' tìm biểu mẫu', 'tìm biểu mẫu' hiệu quả hơn so với' dạng ngữ cảnh' (một hàm gọi). Điều này là hợp lệ cho hầu như tất cả các bộ chọn được sử dụng.Sau đó, IMO 'find form' hiệu quả hơn so với' selector CSS bình thường', bởi vì cả hai phần của selector đều liên quan đến nút gốc, trong phần 'find form', chỉ phần' .sys' có liên quan đến nó, sau đó 'đầu vào [loại = văn bản], chọn' được thực thi trên một tập hợp các phần tử nhỏ hơn nhiều để nó có thể nhanh hơn (nhưng cần điều này cần được xác minh bằng kiểm tra) – pomeh

+0

@pomeh Tôi có thể thấy bạn đến từ đâu, nhưng nếu hiệu suất của một cuộc gọi '$' là * quan trọng * đối với ứng dụng của bạn, hãy 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 đó là câu hỏi về hiệu suất, câu trả lời này sẽ không có ở đây ngay từ đầu. Cảm ơn anyhow cho các bình luận :), đánh giá cao nó –

+0

bình luận của tôi đã không về perf một một '$' gọi, nhưng về tất cả các '$' cuộc gọi hiện diện trong một appl. IMO, khi bạn có những cách khác nhau để làm điều tương tự, tôi cố gắng luôn chọn một trong đó thực hiện tốt hơn bc. 'hiệu suất chậm' ===' người dùng không hài lòng'. Ngoài ra, chúng tôi có thể ** cả hai ** 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à cung cấp những lợi thế/bất tiện của mỗi người trong số họ (như tôi đã làm trong bình luận). IMO, điều quan trọng cần lưu ý là tại sao tất cả các câu trả lời đều khác nhau, trong khi cung cấp kết quả tương tự. Ngoài ra, chúng tôi có thể viết mã vani JavaScript hoạt động chậm: 'JavaScript'! ==' hiệu suất ' – pomeh

6
$('.sys').children('input[type=text], select').each(function() { ... }); 

EDIT: Thực ra mã này trên là tương đương với trẻ em selector .sys > input[type=text] nếu bạn muốn hậu duệ chọn (.sys input[type=text]) bạn cần sử dụng các tùy chọn do @NiftyDude cung cấp. thông tin

thêm:

+0

bạn đã gõ 'chilren' thay vì' children' – pomeh

+0

và tôi đã sửa nó –

+0

@NiftyDude cảm ơn bạn. Tôi đã thêm một số liên kết tham chiếu. –

3
$('input[type=text],select', '.sys'); 

cho Looping:

$('input[type=text],select', '.sys').each(function() { 
    // code 
}); 
4

Nếu bạn có nhiều đầu vào dưới dạng văn bản trong một hình thức hoặc một bảng mà bạn cần phải lặp lại thông qua, tôi đã làm điều này:

var $list = $("#tableOrForm :input[type='text']"); 

$list.each(function(){ 
    // Go on with your code. 
}); 

Tôi đã kiểm tra từng đầu vào để xem loại được đặt thành "văn bản", sau đó nó sẽ lấy phần tử đó và lưu trữ nó trong danh sách jQuery. Sau đó, nó sẽ lặp qua danh sách đó. Bạn có thể đặt biến tạm thời cho phép 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 vòng 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 temp.

Hy vọng điều này sẽ giúp mọi người!

Các vấn đề liên quan