2009-02-01 5 views
30

मेरे पास एक jQuery चयनकर्ता है, जिसमें एक जंजीर फ़ंक्शन है।मैं jQuery चयनकर्ता की अभिव्यक्ति को टेक्स्ट के रूप में कैसे प्राप्त करूं?

फ़ंक्शन के अंदर मैं चयनकर्ता के लिए अभिव्यक्ति का प्रतिनिधित्व करने वाले टेक्स्ट तक पहुंच प्राप्त करना चाहता हूं।

$("cat dog").function() { 

    // how do I get access to the "cat dog" string from inside THIS function ? 
}; 

मैंने इस कोड नमूने में सरलीकृत किया है जो मैं वास्तव में करना चाहता हूं। मैं एक प्लग-इन लिख रहा हूं और मुझे चयनकर्ता तक पहुंच की आवश्यकता है जिसके लिए लपेटा गया सेट बनाया गया है। स्पष्ट रूप से इस विशेष उदाहरण में मुझे "बिल्ली कुत्ता" तक पहुंच है क्योंकि मैंने इसे लिखा है। तो बस एक प्लगइन में यह तस्वीर तस्वीर।

इसके लिए Google के लिए यह थोड़ा मुश्किल है।

संपादित करें: 'चयनकर्ता' संपत्ति दुर्भाग्य से अब बहिष्कृत है। http://jquery.com/upgrade-guide/1.9/#selector-property-on-jquery-objects

+0

आप प्रारंभिक चयनकर्ता प्राप्त कर सकते हैं यहां तक ​​कि अगर, याद रखें कि आपके पास $ ("cat.dog") जैसे कुछ हो सकते हैं। माता-पिता ("div: first")। ("तोता") ढूंढें। प्रत्येक (फ़ंक्शन() {/*...*/}); जहां आपके पास बस एक साधारण चयनकर्ता नहीं है। – svinto

+0

एक बिंदु है जिसके साथ मैं संघर्ष कर रहा हूं। मैं शायद पेड़ को पार करने के बारे में सोच रहा हूं, लेकिन ज्यादातर अंतिम तत्व प्राप्त करना ठीक है। मैं आमतौर पर इस $ ('बिल्ली') की तरह कुछ करना चाहता हूं। assertNonEmpty()। प्रत्येक (फ़ंक्शन() {}); –

+0

कोई भी मौका आप jQuery 1.3.1 में अपग्रेड कर सकते हैं और "चयनकर्ता" का उपयोग कर सकते हैं? – Nosredna

उत्तर

18

jQuery ऑब्जेक्ट में 'चयनकर्ता' विशेषता है, लेकिन मुझे यकीन नहीं है कि यह हमेशा उपलब्ध है।

+0

जब मैंने कोशिश की तो मैं इसे एक्सेस नहीं कर सका। मैं यह देखने के लिए थोड़ा और इंतजार करूंगा कि कोई और मेरे लिए कोशिश करने के लिए बहुत दयालु है :) –

+0

1.3.1 में नया यह है कि यदि आप 1.2.6 का उपयोग कर रहे हैं तो यह – redsquare

+0

उपलब्ध नहीं होगा, मैंने इसे 1.3.1 में उपयोग किया था। – Nosredna

3

यदि आप फ़ायरबग का उपयोग कर रहे हैं तो आप फ़ंक्शन के अंदर console.log(this) कर सकते हैं और देख सकते हैं कि चयनकर्ता स्ट्रिंग ऑब्जेक्ट में कहीं भी पहुंच योग्य है या नहीं। क्षमा करें मैं jQuery एपीआई से परिचित नहीं हूँ।

+0

के लिए धन्यवाद, मैं इसे तुरंत वहां नहीं देख पा रहा हूं, लेकिन मुझे कुछ ऐसा बताने के लिए +1 जो मुझे नहीं पता था। मैं विजुअल स्टूडियो में आईई और डीबगिंग का उपयोग कर रहा था और ऑब्जेक्ट का निरीक्षण करके –

+0

लोएल! आपके संकेत के लिए Thx Luca। फ़ंक्शन में इस चर को डंप करने के लिए भूल गए। :) यहाँ मेरा समय बचाया !! :) धन्यवाद!! –

+0

आईई में स्वेच्छा से डीबगिंग? वाह, यह मस्तिष्कवादी है ;-) –

-2

अच्छी तरह से, मैं अभी भी यह पता लगाने की कोशिश कर रहा हूं कि क्या आप तत्व का नाम प्राप्त करने का प्रयास कर रहे हैं? या आईडी और/या कक्षा या यह सब।

आप इस

 
var element =$(this).get(0); 
var id = $(this).attr('id'); 
var class=$(this).attr('class'); 

नहीं यकीन है कि अगर आप एक से अधिक वर्ग है कि क्या होता है के साथ तत्व मिल सकती है। एक सरणी या कुछ में जा सकता है, और आप इसे इंडेक्स के साथ प्राप्त कर सकते हैं।

+0

@pedalpete - मुझे वह वास्तविक पाठ "बिल्ली कुत्ता" चाहिए - एक स्ट्रिंग के रूप में –

+0

@pedalpete - मुझे लगता है कि शायद इस पोस्ट का शीर्षक थोड़ा भ्रामक है, लेकिन मुझे उम्मीद थी कि प्रश्न स्वयं स्पष्ट था। थोड़ा अस्पष्ट यह देख रहा है। मैं जो चाहता हूं वह वास्तविक स्ट्रिंग मान है कि $ ('बिल्ली कुत्ता') चयनकर्ता का निर्माण –

+0

हेक्टेयर के साथ किया गया था। वास्तव में यह काफी चालाक है। दुर्भाग्य से मुझे इसकी आवश्यकता है (अक्सर एन वास्तव में) यह जानने के लिए कि चयनकर्ता शून्य आइटम लौटाता है। मैं अपने assertion प्लगइन के लिए और अधिक उपयोगी त्रुटि संदेश बनाने की कोशिश कर रहा हूँ http://stackoverflow.com/questions/498469 –

8

यह इष्टतम से बहुत दूर है लेकिन कुछ मामलों में काम करता है। आप निम्न कार्य कर सकते हैं:

jQuery.fn._init = jQuery.fn.init 
jQuery.fn.init = function(selector, context) { 
    return (typeof selector === 'string') ? jQuery.fn._init(selector, context).data('selector', selector) : jQuery.fn._init(selector, context); 
}; 

jQuery.fn.getSelector = function() { 
    return jQuery(this).data('selector'); 
}; 

यह तत्व के लिए उपयोग किए गए अंतिम चयनकर्ता को वापस कर देगा। लेकिन यह मौजूदा मौजूदा तत्वों पर काम नहीं करेगा।

<div id='foo'>Select me!</div> 
<script type='text/javascript'> 
$('#foo').getSelector(); //'#foo' 
$('div[id="foo"]').getSelector(); //'div[id="foo"]' 
$('#iDoNotExist').getSelector(); // undefined 
</script> 

यह jQuery 1.2.6 और 1.3.1 और संभवतः अन्य संस्करणों के साथ काम करता है।

इसके अलावा

:

<div id='foo'>Select me!</div> 
<script type='text/javascript'> 
$foo = $('div#foo'); 
$('#foo').getSelector(); //'#foo' 
$foo.getSelector(); //'#foo' instead of 'div#foo' 
</script> 

संपादित
यदि आप immidiatly जाँच चयनकर्ता के बाद आप अपने प्लगइन में निम्नलिखित इस्तेमाल कर सकते हैं इस्तेमाल किया गया है:

jQuery.getLastSelector = function() { 
    return jQuery.getLastSelector.lastSelector; 
}; 
jQuery.fn._init = jQuery.fn.init 
jQuery.fn.init = function(selector, context) { 
    if(typeof selector === 'string') { 
     jQuery.getLastSelector.lastSelector = selector; 
    } 
    return jQuery.fn._init(selector, context); 
}; 

तो निम्नलिखित काम करेगा:

<div id='foo'>Select me!</div> 
<script type='text/javascript'> 
$('div#foo'); 
$.getLastSelector(); //'#foo' 
$('#iDoNotExist'); 
$.getLastSelector(); // #iDoNotExist' 
</script> 

अपने प्लगइन में आप कर सकता है:

jQuery.fn.myPlugin = function(){ 
selector = $.getLastSelector; 
alert(selector); 
this.each(function() { 
    //do plugins stuff 
} 
} 

$('div').myPlugin(); //alerts 'div' 
$('#iDoNotExist').myPlugin(); //alerts '#iDoNotExist' 

लेकिन फिर भी:

$div = $('div'); 
$('foo'); 
$div.myPlugin(); //alerts 'foo' 
+0

हेक्टेयर की तलाश में था। वास्तव में काफी चालाक है। दुर्भाग्यवश मुझे यह जानने के लिए (वास्तव में वास्तव में नहीं) की आवश्यकता है जब चयनकर्ता शून्य आइटम लौटाता है। मैं अपने assertion प्लगइन के लिए और अधिक उपयोगी त्रुटि संदेश बनाने की कोशिश कर रहा हूँ http://stackoverflow.com/questions/498469 - साइमन –

+0

मैं अभी इसे फिर से पढ़ने के लिए पर्याप्त जागृत नहीं हूं। मैंने केवल देखा है कि आप इसे अपडेट करेंगे। सिर्फ इस कोड का उपयोग करके किसी को भी ध्यान देना चाहता था कि अगर वे कुछ परेशानी देखते हैं तो यह इस समस्या के कारण हो सकता है: http://stackoverflow.com/questions/535967/ –

0

मैं समझ नहीं सकता कैसे (अंदर $ करने के लिए प्रदान चयनकर्ता की स्ट्रिंग मान के संदर्भ में प्राप्त करने के लिए ' value_i_want_here ') जब किसी फ़ंक्शन से बाध्य होता है; एक कठिन समस्या की तरह लगता है। हालांकि, यदि आप IE में परीक्षण पसंद करते हैं [x] हमेशा Firebug Lite है जो वास्तव में console.log (var | val) का उपयोग करने में अच्छी तरह से काम करता है।

2

यह आपको अपनी समारोह में चयनकर्ता स्ट्रिंग का उपयोग करना चाहते हैं तो काम करेगा:

$(this).html(); 

यह भी काम करेंगे कई चयनकर्ता उपयोग कर रहे हैं,

उदाहरण के लिए

,

$('#id1,#id2').click(function(){ 
    alert($(this).html()); 
}); 
1

हो सकता है कि यह आपकी समस्या का समाधान करता है:

var $jqueryItems = $(".my-selector"); 
console.log($jqueryItems.selector); // display ".my-selector" 
+0

। चयनकर्ता अब jQuery में उपलब्ध नहीं है: http://api.jquery.com/selector/ –

1

जो लोग अपने प्लगइन्स चयनकर्ता jQuery के लिए दिया स्ट्रिंग के अंदर प्राप्त करना चाहते हैं के लिए, मैं महान जवाब @Pim Jager द्वारा दिए गए सुधार हुआ है के लिए खुश हूँ:

  1. अब तक (नवीनतम संस्करण 3.2.1) देखते हैं jQuery.fn.init फ़ंक्शन में 0 तर्क - selector, context, root - दो नहीं;
  2. new कीवर्ड jQuery.fn.init के वापसी विवरण में जोड़ा जाना चाहिए;

    (function($, window, document, undefined) { 
        $.fn._init = $.fn.init 
        $.fn.init = function(selector, context, root) { 
         return (typeof selector === 'string') ? new $.fn._init(selector, context, root).data('selector', selector) : new $.fn._init(selector, context, root); 
        }; 
        $.fn.getSelector = function() { 
         return $(this).data('selector'); 
        }; 
        $.fn.YOUR-PLUGIN = function() { 
         var selector = $(this).getSelector(); // selectors string given to jQuery 
         // other code 
        } 
    })(jQuery, window, document); 
    

    यह jQuery के साथ काम करता है:

  3. अपने प्लगइन चयनकर्ताओं के अंदर $(this).getSelector();

अंत में फोन करके एक स्ट्रिंग के रूप में वापस कर रहे हैं, कि क्या मैं एक आकर्षण की तरह मेरे लिए काम करने के लिए आपके पास यह है जहां तक ​​मेरा संबंध है (संस्करण 1.7.0 से 3.2.1 तक)।

पीएस। स्ट्रैक ओवरफ्लो पर यहां उपलब्ध jQuery 1.2.3 के साथ भी ठीक काम करता है।तो, मुझे लगता है कि, निम्नलिखित सभी jQuery संस्करणों के लिए ठीक है आप प्लगइन के अंदर का पाठ के रूप में एक jQuery चयनकर्ता की अभिव्यक्ति प्राप्त करना चाहते हैं:

// our plugin 
 
(function($, window, document, undefined) { 
 
    $.fn._init = $.fn.init 
 
    $.fn.init = function(selector, context, root) { 
 
     return (typeof selector === 'string') ? new $.fn._init(selector, context, root).data('selector', selector) : new $.fn._init(selector, context, root); 
 
    }; 
 
    $.fn.getSelector = function() { 
 
     return $(this).data('selector'); 
 
    }; 
 
    $.fn.coolPlugin = function() { 
 
     var selector = $(this).getSelector(); 
 
     if(selector) console.log(selector); // outputs p #boldText 
 
    } 
 
})(jQuery, window, document); 
 

 
// calling plugin 
 
$(document).ready(function() { 
 
    $("p #boldText").coolPlugin(); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script> 
 
<p>some <b id="boldText">bold text</b></p>

संबंधित मुद्दे