2012-01-09 29 views
8

Tôi đang cố gắng so sánh một chuỗi được đưa ra trong đầu vào cho nội dung của div bằng cách sử dụng jQuery contain.Cách sử dụng jQuery chứa và toLowerCase()

Vấn đề là, tôi muốn có thể kiểm tra xem chuỗi có chứa bất kể chữ hoa/chữ thường hay không.

Đây là chức năng của tôi:

$(document).ready(function() { 
    drawDimensions('dContent'); 
    $('#dSuggest').keyup(function() { 
     var dInput = this.value; 
     $(".dDimension:contains('" + dInput + "')").css("display","block"); 
    }); 
}); 

Vì vậy, nếu một trong những divs .dDimension chứa 'ngày' và một người dùng nhấn 'd' chìa khóa, tôi muốn thể hiện mục đó.

là nó có thể?

+1

thể trùng lặp của [Có một trường hợp không nhạy cảm jQuery: chứa bộ chọn?] (http://stackoverflow.com/questions/187537/is-there-a-case-insensitive-jquery-contains-selector) –

Trả lời

18

Bạn có thể sử dụng .filter[docs]:

var dInput = this.value.toLowerCase(); 

$(".dDimension").filter(function() { 
    return $(this).text().toLowerCase().indexOf(dInput) > -1; 
}).css("display","block"); 
+0

Tôi có thể sử dụng chức năng '' not'' để kiểm tra ngược lại không? –

+0

Chắc chắn. Hoặc bạn thay đổi '> -1' thành' === -1'. –

+0

Cảm ơn! làm việc hoàn hảo. –

1

Bạn có thể viết chọn của riêng bạn bằng cách mở rộng jQuery. Hãy thử điều này

$.extend($.expr[':'], { 
    'containsi': function(elem, i, match, array) 
    { 
    return (elem.textContent || elem.innerText || '').toLowerCase() 
    .indexOf((match[3] || "").toLowerCase()) >= 0; 
    } 
}); 

năng bảo mật bằng $(".dDimension:containsi('" + dInput + "')").css("display","block");

0

Các ý kiến ​​cuối cùng trong the jQuery documentation for contains cung cấp một thực hiện 'icontains' mà có thể phù hợp với bạn.

$.expr[':'].icontains = function(obj, index, meta, stack){ 
    return (obj.textContent || obj.innerText || jQuery(obj).text() || '').toLowerCase().indexOf(meta[3].toLowerCase()) >= 0; 
}; 

// Example usage. 
$("div:icontains('John')").css("text-decoration", "underline"); 
1

Có một cái nhìn tại this example, ông mở rộng bộ chọn jQuery với một chọn case-insensitive chứa mà ông gọi là containsi, như thế này:

$.extend($.expr[':'], { 
    'containsi': function (elem, i, match, array) { 
     return (elem.textContent || elem.innerText || '').toLowerCase().indexOf((match[3] || '').toLowerCase()) >= 0; 
    } 
}); 
+0

Điều đó khá giống với những gì [ShankarSangoli đăng] (http://stackoverflow.com/a/8795791/218196). –

+0

@ FelixKling Yeah, đó có vẻ là điều tương tự. Nếu không có ref cho tác giả ban đầu mặc dù :) –

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