2013-10-19 17 views
32

Tôi đang làm thuộc tính sử dụng sau đây có chứa selector $('[attribute*=value]')Trường hợp không nhạy cảm jQuery thuộc tính chọn

<input name="man-news"> 
<input name="milkMan"> 

<script>  
    $("input[name*='man']").css("background-color:black"); 
</script> 

này hoạt động cho đầu vào ngày 1 nhưng không phải là đầu vào thứ hai là "Man" có vốn "M"

Làm cách nào để tạo $("input[name*='man']") bộ chọn không phân biệt chữ hoa chữ thường?

+1

thể trùng lặp của [trường hợp chọn CSS không nhạy cảm cho thuộc tính] (http://stackoverflow.com/questions/5671238/css-selector-case-insensitive-for-attributes) – falinsky

+0

Bản sao có thể có của [Bộ chọn giá trị thuộc tính-giá trị phân biệt chữ hoa chữ thường với Jquery] (http: // stackoverflo w.com/questions/5755722/case-insensitive-attribute-value-selector-with-jquery) –

Trả lời

31

Bạn luôn có thể sử dụng .filter():

var mans = $('input').filter(function() { 
    return $(this).attr('name').toLowerCase().indexOf('man') > -1; 
}); 

mans.css('background-color', 'black'); 

Các phần quan trọng ở đây là toLowerCase() mà lowercases thuộc tính name, cho phép bạn kiểm tra nó để chứa man.

2
var control = $('input').filter(function() { 
    return /*REGEX_VALUE*/i.test($(this).attr('id')); 
}); 

* REGEX_VALUE * - giá trị mà bạn muốn tìm

tôi đã kết thúc sử dụng regex để xác minh xem các thuộc tính 'ID' đáp ứng ... regex là nhiều linh hoạt hơn nếu bạn muốn tìm một số giá trị khớp lệnh hoặc giá trị, trường hợp nhạy cảm hoặc nhạy cảm hoặc một phạm vi nhất định của giá trị ...

1

tôi chỉ có thể bỏ qua trường hợp sensetivity jQuery hoàn toàn để đạt được những gì tôi muốn sử dụng bên dưới mã,

  $.expr[":"].contains = $.expr.createPseudo(function(arg) { 
      return function(elem) { 
       return $(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0; 
      }; 
     }); 

Bạn có thể sử dụng liên kết này để tìm mã dựa trên các phiên bản jQuery của bạn, https://css-tricks.com/snippets/jquery/make-jquery-contains-case-insensitive/

Cũng có bài viết này, nơi nó đến nhiều điều tốt với jquery: http://www.ultechspot.com/jquery/using-jquery-search-html-text-and-show-or-hide-accordingly

36

Cách đơn giản nhất để làm điều này là để thêm một lá cờ trường hợp vô hồn 'i' bên trong phần regex của bộ chọn:

Vì vậy, thay vì

$("input[name*='man']")

Bạn có thể làm

$("input[name*='man' i]")

JS fiddle: https://jsfiddle.net/uoxvwxd1/3/

+6

FYI: Hoạt động trong Chrome 53, nhưng không phải IE 11, thú vị, nhưng không lý tưởng – Stan

+0

@Stan Điều đó làm tôi nhớ. Tôi đã thấy kết quả khác nhau trong Chrome và IE11, và nghĩ rằng không thể được; phải có một số khác biệt khác. Sau đó, tôi thấy bình luận của bạn. Tôi nghĩ toàn bộ quan điểm của jQuery là độc lập với trình duyệt. Tôi đặc biệt mong đợi điều này là đúng khi nói đến nội bộ như cú pháp chọn. Bất kỳ ý tưởng về lý do tại sao sự khác biệt này tồn tại hoặc nếu/nơi nó được tài liệu? – BlueMonkMN

+0

@BlueMonkMN Đã một năm rồi và tôi chưa thử lại, nhưng tôi đoán đó là xử lý REGEX của IE, đó là trách nhiệm cho sự khác biệt. – Stan

0

này làm việc cho tôi sử dụng jQuery và nếu tôi thêm mục vào một bảng

// check if item already exists in table 
    var inputValue = $('#input').val(); // input 
    var checkitem = $('#exampleTable td.value div.editable').filter(function() { 

     //check each table's editable div matches the input value in lowercase 
     if ($(this).text().toLowerCase() === inputValue.toLowerCase()) { 
      itemexists = true; 
     } 
    }); 

    if (itemexists) { 
     alert("item exists in the table"); 
     return; 
    } 
Các vấn đề liên quan