2010-10-19 8 views
6

मैं निम्न पंक्ति का उपयोग कर रहा है और मैं इसे केस-संवेदी बनाने के लिए करना चाहते हैं:लेखन jQuery चयनकर्ता केस-संवेदी संस्करण

var matches = $(this).find('div > span > div#id_to_find[attributeName ^= "filter"]'); 
if (matches.length > 0) { 
} 

मेरा प्रश्न है कि मैं कैसे कर सकते हैं चयनकर्ता ^= केस-संवेदी हो रहा है ? शायद फ़िल्टर करने के लिए बदल रहा है और फिर कुछ regexp?

+0

मैं यहाँ बात का उपयोग करने के अंतिम पंक्ति बदल जवाब भी है: http: // stackoverflow। कॉम/प्रश्न/187537/है-ए-केस-असंवेदनशील-jquery-include-selector – Diego

उत्तर

9

केस-असंवेदनशील विशेषता चयन करने के लिए, आपको एक कस्टम चयन लिखना होगा या समारोह।

$.expr[':'].iAttrStart = function(obj, params, meta, stack) { 
    var opts = meta[3].match(/(.*)\s*,\s*(.*)/); 
    return (opts[1] in obj) && (obj[opts[1]].toLowerCase().indexOf(opts[2].toLowerCase()) === 0); 
}; 

आप इस तरह इस का उपयोग कर सकते हैं:

$('input:iAttrStart(type, r)') 

यह किसी भी input तत्वों जिसका type विशेषता R या r (इसलिए यह मेल खाएंगे RADIO, radio, RESET या reset) के साथ शुरू होता भरपाई कर देंगे। यह एक सुंदर मूर्ख उदाहरण है, लेकिन आपको जो चाहिए वह करना चाहिए।


टिप्पणी दें कि फ़ंक्शन को समझना मुश्किल है, मैं इसे थोड़ा समझाऊंगा।

$.expr[':'].iAttrStart = function(obj, params, meta, stack) { 

कस्टम चयनकर्ता बनाने के लिए यह मानक हस्ताक्षर है।

var opts = meta[3].match(/(.*)\s*,\s*(.*)/); 

meta कॉल के बारे में विवरणों की एक श्रृंखला है। meta[3] पैरामीटर के रूप में पारित स्ट्रिंग है। मेरे उदाहरण में, यह type, r है। रेगेक्स type और r अलग से मेल खाता है।

return (opts[1] in obj) && (obj[opts[1]].toLowerCase().indexOf(opts[2].toLowerCase()) === 0); 

वापसी करता है, तो इन दोनों सत्य हैं:

  1. का अनुरोध विशेषता इस वस्तु पर मौजूद है (opts[1] in obj)
  2. खोज पद (लोअर केस करने के लिए बदल) के बहुत शुरुआत में पाया जाता है तत्व का गुण मान, भी कम मामले में बदल गया।

मैं मूल जेएस सिंटैक्स की बजाय jQuery वाक्यविन्यास का उपयोग करके पढ़ना आसान बना सकता था, लेकिन इसका मतलब कम प्रदर्शन था।

+0

समाधान के लिए धन्यवाद! यह पता लगाने के लिए थोड़ा सा समय लगा कि कौन सा कार्य करता है, लेकिन अब जब मैं समझता हूं कि यह बहुत अच्छा है। – Tx3

+0

कोई चिंता नहीं। मैंने कोड का स्पष्टीकरण जोड़ा है। – lonesomeday

+0

बहुत अच्छा संपादन, धन्यवाद! – Tx3

2

यहाँ आप देख सकते हैं:

http://www.ericmmartin.com/creating-a-custom-jquery-selector/

आप क्या करना है एक कस्टम jQuery चयनकर्ता बनाने के लिए है:

jQuery.extend(jQuery.expr[':'], { 
    exactIgnoreCase: "(a.textContent||a.innerText||jQuery(a).text()||'').toLowerCase() == (m[3]).toLowerCase()" 
}); 

और फिर बस इसे का उपयोग करें:

$("#detail select.fields option:exactIgnoreCase(" + q.val() + "):first"); 
+0

उत्तर के लिए धन्यवाद, लेकिन मुझे लगता है कि मैं इस समय lonesomeday के उत्तर का उपयोग करूंगा – Tx3

0

लोन्सोमेडे के उत्तर का उपयोग करते समय थोड़ी सी समस्या है।

त्रुटि पुन: पेश करने के लिए, इस प्रयास करें: पृष्ठ पर HTML टैग एक आम फेसबुक मेटा टैग है:

<meta content="Title of og tag" property="og:title" /> 

चयनकर्ता:

$('meta:attrCaseInsensitive(property, og:site_name)') 

यह काम नहीं करेगा। इसका कारण यह है कि जब चयनकर्ता कोड (opts[1] in obj) पर जाता है तो यह ("property" in obj) निष्पादित करेगा जो झूठी रिटर्न देता है।

इस समस्या को दूर करने के लिए (मैं पता नहीं क्यों), मैं बस jQuery के attr() विधि

$.expr[':'].iAttrStart = function(obj, params, meta, stack) { 
    var opts = meta[3].match(/(.*)\s*,\s*(.*)/); 
    return (undefined != $(obj).attr(opts[1])) && (obj[opts[1]].toLowerCase().indexOf(opts[2].toLowerCase()) === 0) 
}; 
संबंधित मुद्दे