2008-10-10 36 views
492

Tôi là tài liệu về sử dụng ký tự đại diện hoặc cụm từ thông dụng (không chắc chắn về thuật ngữ chính xác) với bộ chọn jQuery.Biểu thức chính quy của bộ chọn jQuery

Tôi đã tự mình tìm kiếm nhưng không thể tìm thấy thông tin về cú pháp và cách sử dụng nó. Có ai biết tài liệu cho cú pháp ở đâu không?

EDIT: Bộ lọc thuộc tính cho phép bạn chọn dựa trên mẫu của giá trị thuộc tính.

+0

Bạn cần xem câu trả lời hiện tại như thế nào? –

+11

Các ý kiến ​​cho câu hỏi này cần phải được khóa để không ai làm cho ý kiến ​​vô nghĩa như "nổi tiếng" hoặc "nổi tiếng thực sự" –

Trả lời

290

James Padolsey đã tạo một wonderful filter cho phép sử dụng regex để chọn.

Giả sử bạn có sau div:

<div class="asdf"> 

lọc Padolsey của :regex có thể chọn nó như vậy:

$("div:regex(class, .*sd.*)") 

Ngoài ra, kiểm tra official documentation on selectors.

+2

Ok. Tôi đã ở đó nhưng tôi không thực sự biết tên của những gì tôi đang tìm kiếm. Ive có một cái nhìn và sử dụng các bộ lọc thuộc tính là những gì tôi đã sau. –

+1

tài nguyên tuyệt vời! – iamserious

+0

Bộ chọn regex của @padolsey hoạt động rất tốt.Dưới đây là ví dụ bạn có thể lặp qua các trường nhập văn bản, tệp và hộp kiểm hoặc văn bản với: $ j ('đầu vào: regex (loại, văn bản | tệp | hộp kiểm), textarea') mỗi (hàm (chỉ mục) { // ... }); –

642

Bạn có thể sử dụng chức năng filter để áp dụng đối sánh regex phức tạp hơn. Dưới đây là một ví dụ mà sẽ chỉ phù hợp với ba divs đầu tiên (live bản demo here):

<div id="abcd"></div> 
<div id="abccd"></div> 
<div id="abcccd"></div> 
<div id="abd"></div> 
$('div') 
    .filter(function() { 
     return this.id.match(/abc+d/); 
    }) 
    .html("Matched!"); 
+135

+1 cho giải pháp đơn giản không yêu cầu thư viện/plugin bổ sung. – maerics

+30

3 năm muộn ở đây, nhưng tôi chỉ tìm kiếm các ký tự đại diện jQuery và thấy điều này cực kỳ hữu ích. Tôi ghét tải hàng trăm thư viện khi nó có thể tránh được. Đó là toàn bộ lý do tôi đã đi với jQuery ở nơi đầu tiên, là để kết hợp tất cả các chức năng tôi có thể muốn trong một vài chức năng đơn giản và mạnh mẽ. – stevendesu

+2

@stevendesu: Và thêm 3 năm sau, tôi cũng quyết định gắn bó với câu trả lời này thay vì làm đầy jQuery với nhiều bộ chọn hơn. –

1
$("input[name='option[colour]'] :checked ") 
17
var test = $('#id').attr('value').match(/[^a-z0-9 ]+/); 

Ở đây bạn đi!

38

Nếu bạn sử dụng biểu thức chính quy được giới hạn để kiểm tra nếu một khởi đầu attribut với một chuỗi nào đó, bạn có thể sử dụng^jquery selector

Ví dụ, nếu muốn bạn chỉ chọn div với id bắt đầu bằng "abc" , bạn có thể sử dụng $("div[id^='abc']")

rất nhiều bộ chọn rất hữu ích để tránh sử dụng regex có thể được tìm thấy ở đây: http://api.jquery.com/category/selectors/attribute-selectors/

+0

điều này sẽ không hoạt động đối với các yêu cầu đối sánh không phân biệt chữ hoa chữ thường. Hàm .filter phù hợp hơn với những nhu cầu đó. – brainondev

+0

điều này là tốt cho tôi, tôi chỉ muốn xem nếu có một '__destroy' vào cuối của một id đầu vào vì vậy tôi đã sử dụng '* =' như thế này: '$ (" input [id * = '__ destroy'] [ value = 'true'] ")' – ryan2johnson9

183

đây có thể là hữu ích.

Nếu bạn đang tìm kiếm bởi sau đó nó sẽ được như thế này

$("input[id*='DiscountType']").each(function (i, el) { 
     //It'll be an array of elements 
    }); 

Nếu bạn đang tìm kiếm bởi Bắt đầu Với sau đó nó sẽ được như thế này

$("input[id^='DiscountType']").each(function (i, el) { 
     //It'll be an array of elements 
    }); 

Nếu bạn đang tìm kiếm theo số Kết thúc bằng thì nó sẽ như thế này

 $("input[id$='DiscountType']").each(function (i, el) { 
     //It'll be an array of elements 
    }); 

Nếu bạn muốn chọn các yếu tố mà id không phải là một chuỗi cho trước

$("input[id!='DiscountType']").each(function (i, el) { 
     //It'll be an array of elements 
    }); 

Nếu bạn muốn chọn các yếu tố mà id chứa một từ nhất định, giới hạn bởi không gian

 $("input[id~='DiscountType']").each(function (i, el) { 
     //It'll be an array of elements 
    }); 

Nếu bạn muốn chọn các thành phần có mã số bằng một chuỗi đã cho hoặc bắt đầu bằng chuỗi đó theo sau là dấu gạch ngang

 $("input[id|='DiscountType']").each(function (i, el) { 
     //It'll be an array of elements 
    }); 
+1

Câu trả lời hay, nhưng 'id's, là số nhận dạng, [không thể chứa một dấu cách] (https://www.w3.org/TR/CSS21/syndata.html#value -def-identifier), ví dụ '~ =' sẽ được thay đổi thành một cái gì đó khác, như 'lớp', là một danh sách các số nhận dạng trắng được phân tách bằng dấu cách. Những thứ như 'class' là cái mà bộ chọn thuộc tính' ~ = 'được dùng cho. –

5

Thêm một hàm jQuery,

(function($){ 
    $.fn.regex = function(pattern, fn, fn_a){ 
     var fn = fn || $.fn.text; 
     return this.filter(function() { 
      return pattern.test(fn.apply($(this), fn_a)); 
     }); 
    }; 
})(jQuery); 

Sau đó,

$('span').regex(/Sent/) 

sẽ chọn tất cả các yếu tố tuổi với văn bản phù hợp/Sent /.

$('span').regex(/tooltip.year/, $.fn.attr, ['class']) 

sẽ chọn tất cả các phần tử span với các lớp khớp với /tooltip.year/.

0

Nếu bạn chỉ muốn chọn các yếu tố có chứa cho chuỗi sau đó bạn có thể sử dụng sau selector:

$(':contains("search string")')

0

Tôi chỉ đưa ra thời gian thực ví dụ của tôi:

Trong javascript mẹ đẻ tôi đã sử dụng đoạn mã sau để tìm các phần tử có id bắt đầu bằng "select2-qownerName_select-result".

document.querySelectorAll("[id^='select2-qownerName_select-result']");

Khi chúng ta chuyển từ javascript để jQuery, chúng tôi đã thay thế trên đoạn với những điều sau đây trong đó bao gồm thay đổi mã ít mà không làm phiền logic.

$("[id^='select2-qownerName_select-result']")

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