2012-01-06 25 views
8

में पहचानें $(this) वर्तमान में jQuery में बराबर क्या है इसका पता लगाने का सबसे अच्छा तरीका क्या है?jQuery (0) को jQuery

उदाहरण के लिए बहुत मदद नहीं है।

कारण मैं पूछता हूं कि कोड का एक टुकड़ा वर्तमान में ऐसा नहीं कर रहा है जब मुझे कोड को फ़ंक्शन में स्थानांतरित करने के बाद क्या करना चाहिए।

नीचे दिया गया अंश अब एक समारोह में है, और $ (यह) अब डोमविंडो को संदर्भित करता है।

if($(this).hasClass('open')) 
    { 
    alert('I should be closed'); 
    $(this).removeClass('open').addClass('closed'); 
    $(this).parents('article').css('border', '1px solid red').animate({'width': '212px'}, 100, "linear", function() { 
    run_masonry(); 
    }); 
    } 
    else 
    { 
    alert('I should be open'); 
    $(this).removeClass('closed').addClass('open'); 
    $(this).parents('article').css('border', '1px solid blue').animate({'width': '646px'}, 100, "linear", function() { 
    run_masonry(); 
    }); 
} 

मैं इसे $ (यह) मूल क्लिक किए गए तत्व के रूप में कैसे रखूं?

उत्तर

22

क्या $(this) वर्तमान में jQuery में बराबर है यह जानने का सबसे अच्छा तरीका क्या है?

अपने पसंदीदा जावास्क्रिप्ट डीबगिंग टूल के कंसोल (जैसे FireBug या Chrome डेवलपर उदाहरण के लिए उपकरण पट्टी) को लॉग इन करके:

console.log($(this)); 

जो एक jQuery वापस आ जाएगी वस्तु लपेटा। आप इस्तेमाल कर सकते हैं आप देशी वस्तु के बारे में अधिक जानना चाहते हैं:

console.log(this); 

आप जावास्क्रिप्ट विकास कर रहे हैं, तो आप एक जावास्क्रिप्ट डीबगिंग उपकरण का उपयोग करना चाहिए। alert ऐसा उपकरण नहीं है।


अब जब कि तुम कुछ कोड के स्रोत के साथ अपने प्रश्न को अद्यतन किया है यह है कि आप वैश्विक क्षेत्र में $(this) उपयोग कर रहे हैं लगता है। फिर यह window ऑब्जेक्ट का संदर्भ देगा। आप इसे कुछ क्लिक किया जाने वाला तत्व या कुछ का उल्लेख करना चाहते हैं तो सबसे पहले .click घटना की सदस्यता के लिए करना होगा:

function foo() { 
    // here $(this) will refer to the original element that was clicked. 
} 

$('.someSelector').click(foo); 
:

$('.someSelector').click(function() { 
    // here $(this) will refer to the original element that was clicked. 
}); 

या तो आपको एक अलग समारोह में इस कोड बाह्यरूप करना चाहते थे

या:

function foo(element) { 
    // here $(element) will refer to the original element that was clicked. 
} 

$('.someSelector').click(function() { 
    foo(this); 
}); 
+0

वहाँ वैसे भी इसे नीचे संकीर्ण करने के लिए है कि डेटा का एक बहुत रिटर्न –

+0

@CraigWard, हाँ, console.log का उपयोग' (यह)। ई मूल वस्तु और '$ (यह)' नहीं। –

+0

@CraigWard आप इसे कम करने के लिए क्या करना चाहते हैं? मेरी इच्छा है कि यह '$ (यह) .attributesThatIWantToSee()' – Connell

1
एक समारोह में आमतौर पर कोड में परिवर्तन की गुंजाइश कोड का स्थान बदलना के साथ

। तो "यह" अब मूल वस्तु को संदर्भित नहीं करेगा बल्कि एक नए (या वैश्विक "विंडो" ऑब्जेक्ट) के लिए होगा। यदि आप हमें अपना कोड दिखाते हैं तो हम समस्या की पहचान करने में सक्षम होंगे।

+0

यह समस्या की तरह लगता है। यह डोमविंडो लौट रहा है। क्या समारोह में $ (यह) रखने का कोई तरीका है? –

+0

कई तरीकों से, लेकिन यह इस बात पर निर्भर करता है कि आप क्या कर रहे हैं ... –

+0

मैंने कुछ कोड शामिल करने के लिए प्रश्न अपडेट किया है –

0

मुझे लगता है कि आप कुछ इस तरह करते हैं:

$('#element').click(function() { 
    clickHandler(); 
}); 

इस मामले clickHandler में खिड़की वस्तु संदर्भ में बुलाया जाएगा। संरक्षित करने के लिए सही संदर्भ बस के लिए अपने कोड बदलने के लिए:

$('#element').click(clickHandler); 
0

आप क्या पारित किया जा रहा है या तो आप मेरी संस्करण या jquerylog की prinzhorn के संस्करण का उपयोग कर सकते आसपास जाँच करना चाहते हैं।यह आप चरण दर चरण पहचानने में सहायता मिलेगी क्या हो रहा है:

$("#foo").parents(".t1").next().prev().parent().find(".t2:last .t4:last").text("test"); 

आप (इस तरह एक आउटपुट जो हर कदम में div की पहचान करता मिल जाएगा:

http://www.jquerylog.com/https://github.com/fmsf/jQueryLog

के लिए कॉल की तरह एक : केवल वें लॉग इन करने के `

$('#foo'): [<div id="foo" class="t3"></div>] 
    parents('.t1'): [ <div class="t1">…</div> ] 
     next(undefined): [ <div class="t1">…</div> ] 
      prev(undefined): [ <div class="t1">…</div> ] 
       parent(undefined): [ <body>…</body> ] 
        find('.t2:last .t4:last'): [<div class="t4">teste</div>]