2011-04-30 37 views
5

Với jQuery, người ta có thể sử dụng:Làm thế nào để sử dụng: chứa (văn bản) với bất kỳ văn bản với jQuery

$(":contains(hello)") 

Nó sẽ trả lại bất kỳ yếu tố phù hợp có chứa dòng chữ "hello".

Tôi muốn có thể khớp bất kỳ văn bản nào, đặc biệt là "xin chào :)".

$(":contains(hello :))") // Doesn't work 
$(":contains('hello :)')") // Doesn't work 
$(":contains('hello :\)')") // Doesn't work 

Làm cách nào để tìm các thành phần có chứa "hello :)" với jQuery?

Trả lời

4

Xem this answer để biết cách thực hiện.

Nó cơ bản liên quan đến .filter để có được xung quanh a known :contains bug:

$('#demo').filter(function(i, el) { 
    return !!$(el).text().match(/hello :\)/); 
}); 

Sống example.

Lưu ý rằng thực hiện .length trên kết quả này có thể cung cấp cho bạn giá trị lớn hơn 1 ngay cả khi chỉ có một phần tử chứa văn bản đó, vì cha mẹ của phần tử cũng sẽ khớp.

+0

+1 cho mashup đẹp;) – Alp

0

từ jQuery:!.?

Nếu bạn muốn sử dụng bất kỳ siêu ký tự (chẳng hạn như "# $% & '() * +,/:; < => @ []^`{|} ~) như là một phần đen của một tên, bạn phải thoát khỏi nhân vật với hai dấu xồ nguợc: \\

vì vậy hãy thử này

$(":contains('hello \\:\\)')") 
+2

Nó [dường như không hoạt động] (http://jsfiddle.net/alexdickson/q3Uyh/). – alex

+0

[Bạn đã thử không?] (Http://jsfiddle.net/HrFGK/) –

+0

Nó không hoạt động ... –

1

này có vẻ là một lỗi mở: http://bugs.jquery.com/ticket/5482

Và có statement này jakkob:

Tôi cũng phát hiện ra rằng các lỗi chỉ đến nếu khung nằm ở cuối của chứa thể hiện.

+0

Câu trả lời này không cung cấp một giải pháp, mặc dù. –

0

đang nhanh:

jQuery.fn.contains = function(re) { 
    return this.filter(function(i, el) { 
    return !$(el).text().match(RegExp(re)); 
    }); 
}; 

Bằng cách này bạn có thể làm:

$("*").contains(":\\)") // returns all elements in the page that contains ':)' 

Lưu ý: chứa() chấp nhận một biểu thức chính quy (có nghĩa là bạn cần phải thoát khỏi bất cứ điều gì cần phải được thoát cho một regexp)

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