2011-09-29 29 views
15

Tôi muốn tạo bộ chọn để tìm các phần tử có thuộc tính bắt đầu bằng chuỗi. Tại thời điểm này, tôi giả định rằng bộ chọn này không tồn tại. Tôi có cần mở rộng khả năng chọn không? Extending jQuery’s selector capabilities bởi James Padolseylàm cách nào để tìm các phần tử chứa thuộc tính data- * khớp với tiền tố sử dụng jquery

Tôi cần thể hiện một cái gì đó giống như Thuộc tính chứa Tiền tố Selector [name | = "value"], nhưng thay vì khớp với "giá trị", tôi cần khớp với tên của thuộc tính chứ không phải giá trị của thuộc tính.

<tag data-plugin-option1="val1" data-plugin-option2="val2" />

Tôi muốn kết thúc với một cú pháp như thế này: $('tag(:attr|="data-plugin")') mà nên tìm các yếu tố tag bởi vì nó có ít nhất một yếu tố mà bắt đầu với data-plugin

+2

Tôi nghĩ '.data() 'phân tích những cách tự động, mặc dù nó có thể là chỉ trong HTML 5, tôi không thể nhớ ngay bây giờ –

+2

@Pekka: Tôi nghĩ OP đang tìm kiếm một bộ chọn trả về * các phần tử * có tên thuộc tính phù hợp (hoặc tên một phần). – user113716

+0

Có, tôi đang tìm một bộ chọn trả về các phần tử. – JJS

Trả lời

11

Vâng, tôi đoán tôi đang đọc câu hỏi của bạn một cách khác nhau.

Cách tôi đọc nó, bạn muốn tạo công cụ chọn tùy chỉnh chọn các phần tử có tên thuộc tính nhất định (hoặc bắt đầu tên đó).

Nếu vậy, tôi nghĩ bạn cần lặp lại bộ sưu tập attributes cho mỗi phần tử.

DEMO:http://jsfiddle.net/GgmM7/

$.extend($.expr[':'],{ 
    attrNameStart: function(el,i,props) { 

     var hasAttribute = false; 

     $.each(el.attributes, function(i,attr) { 
      if(attr.name.indexOf(props[3]) !== -1) { 
       hasAttribute = true; 
       return false; // to halt the iteration 
      } 
     }); 

     return hasAttribute; 
    } 
}); 

$('img:attrNameStart(data-plugin)') 
+0

đó là một số mã đẹp. Tôi không chắc tại sao tôi lại vắng mặt đến nỗi tôi quên mất thuộc tính 'thuộc tính' trên một phần tử dom. cám ơn rất nhiều! – JJS

+0

@JJS: Bạn được chào đón. – user113716

+0

Thật tuyệt vời. Cảm ơn. – itslittlejohn

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