jQuery प्रोटोटाइप के Element.identify को एक बराबर है?

वोट
9

वहाँ है आप स्वचालित रूप से jQuery में एक तत्व के लिए एक अद्वितीय पहचान प्रदान करने देगा कि, या आप अपने आप को कुछ इस तरह लागू करने के लिए की जरूरत है विधि या वास्तविक डिफ़ॉल्ट प्लगइन में बनाया गया एक? मैं करने के लिए jQuery बराबर की तलाश में हूँ प्रोटोटाइप की विधि की पहचान

यहाँ एक उदाहरण है। मैं एक पृष्ठ है कि इस तरह दिखता है पर कुछ HTML संरचना है

<span id=prefix_1>foo bar</span>
...
<div id=foo>
   <span></span>
   <span></span>
   <span></span>
</div>

मैं स्पैन की प्रत्येक एक आईडी है कि पृष्ठ के लिए अद्वितीय हो जाएगा प्रदान करना चाहते हैं। तो कुछ इस तरह बुला के बाद

$('#foo span').identify('prefix');   //fake code, no such method

गाया डोम कुछ इस तरह दिखेगा

<span id=prefix_1>foo bar</span>
...
<div id=foo>
   <span id=prefix_2></span>
   <span id=prefix_3></span>
   <span id=prefix_4></span>
</div>

क्या सरकारी-ish / jQuery के लिए मजबूत है, या यह कुछ सबसे jQuery डेवलपर्स अपने दम पर रोल है?

22/01/2009 को 21:59
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


5 जवाब

वोट
3

ऐसा नहीं है कि मैं के बारे में पता है, लेकिन आप अपने आप को जोड़कर इस कर सकता है idविशेषता में वह GUID की आपूर्ति।

विशेषता जोड़ने के लिए:

$(foo).attr( "id", createGuid() );

के लिए createGuid()कार्यान्वयन, इस सवाल को देखने

ध्यान दें कि आप आसानी से एक में यह बदल सकती है jQuery प्लग में इतना है कि यह समारोह (आप भी यह नाम दे सकते हैं identify()) किसी भी पर उपलब्ध है $-अभिव्यक्ति।

22/01/2009 को 22:03
का स्रोत उपयोगकर्ता

वोट
-1

हो सकता है कि कोशिश

$("#foo span").each(function(){
   $(this).attr("id", "prefix_" + $(this).parent().index($(this)));
});
22/01/2009 को 22:05
का स्रोत उपयोगकर्ता

वोट
22

jQuery.fn.identify = function(prefix) {
    var i = 0;
    return this.each(function() {
        if(this.id) return;
        do { 
            i++;
            var id = prefix + '_' + i;
        } while($('#' + id).length > 0);            
        $(this).attr('id', id);            
    });
};

$('span').identify('test');

इस पर परीक्षण किया गया:

<span id='test_2'></span>
<span>test1</span>
<span>test2</span>
<span>test3</span>

यह करने के लिए बदल गया:

<span id="test_2"></span>
<span id="test_1">test1</span>
<span id="test_3">test2</span>
<span id="test_4">test3</span>
22/01/2009 को 22:09
का स्रोत उपयोगकर्ता

वोट
2

पाओलो के समाधान के आधार पर:

jQuery.fn.identify = function(prefix) {
    var i = 0;
    return this.each(function() {
        if($(this).attr('id')) return;
        do { 
            i++;
            var id = prefix + '_' + i;
        } while($('#' + id).length > 0);            
        $(this).attr('id', id);            
    });
};

$('span').identify('test');

एक छोटा सा परिवर्तन यह है कि करने के लिए से बचने जाएगा फिर से गिनती पहले से ही आईडी का इस्तेमाल किया।

22/01/2009 को 22:20
का स्रोत उपयोगकर्ता

वोट
1

मैं दिया समारोह थोड़ा संशोधित करने और इसे बनाने चाहते हैं:

jQuery.fn.identify = function(prefix) {
    var i = 0;
    return this.each(function() {
        if($(this).attr('id')) return;
        do { 
            i++;
            var id = prefix + '_' + i;
        } while(document.getElementById(id) != null);            
        $(this).attr('id', id);            
    });
};

आईडी के विशेष वर्ण है कि आदेश jQuery के सीएसएस चयनकर्ता इंजन के साथ ठीक से काम करने से बचने की आवश्यकता होगी हो सकता है - "।" की तरह। तो बजाय उन्हें खोजने और उन्हें बचने का, यह दस्तावेज़ विधि से बदलने के लिए सरल और तेज है।

12/05/2010 को 18:30
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more