2011-03-15 6 views
16

मैंने सोचा कि jquery में कुछ था जो आपको एक श्रृंखला के माध्यम से पिछड़ा जाने की अनुमति देता था।Jquery का उपयोग करके आप श्रृंखला के माध्यम से पीछे कैसे जाते हैं?

मैं ऐसा करना चाहते हैं:

var a = $(this).parent().addClass('test').goBackToParent().children('selectorHere').text() 

मैं वस्तु मेरे पास है कि माता-पिता की हो और इसे करने के लिए एक वर्ग के नाम जोड़ना चाहते हैं। एक बार ऐसा करने के बाद मैं अपने बच्चों के माध्यम से जाना चाहता हूं और एक बच्चा ढूंढना चाहता हूं जो मेरे चयनकर्ता से मेल खाता है और अपना टेक्स्ट प्राप्त करता है।

मैं यह कर सकता, या मैं बजाय ऐसा करने की क्या ज़रूरत है:

$(this).parent().addClass('test'); 
var a = $(this).parent().children('selectorHere').text() 

संपादित

मैं उपयोग कर रहा हूँ "अंत" अब, लेकिन यह काम नहीं करता मैं एक उदाहरण बना दिया है कि आप कोशिश कर सकते हैं here

<!DOCTYPE html> 
<html> 
<head> 
<script class="jsbin" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> 
<meta charset=utf-8 /> 
<title>JS Bin</title> 
<!--[if IE]> 
    <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> 
<![endif]--> 
<style> 
    article, aside, figure, footer, header, hgroup, 
    menu, nav, section { display: block; } 
</style> 
</head> 
<body> 
    <table> 
    <th> 
     <tr>one</tr> 
     <tr>two</tr> 
    </th> 
    <tr> 
     <td id="test"><a href="#"><img src="http://ais.web.cern.ch/ais/apps/hrt/SMT%20v2/Images/btnbar_edit.png" /></a></td> 
     <td class="selectMe">1</td> 
    </tr> 
    </table> 
</body> 
</html> 


$(function() 
    { 
     $('#test').click(function() 
         { 
          // does not work 
          var a = $(this).parent().addClass('afb').end().children('.selectMe').text(); 
          // works 
          var b = $(this).parent().children('.selectMe').text(); 
         alert(a + ' -should have value'); 
          alert(b + ' -works'); 
         return false; 
         }); 
    }); 

उत्तर

28

आप end() विधि के लिए देख रहे:

var a = $(this).parent().addClass('test').end() 
       .children('selectorHere').text(); 

विधि:

वर्तमान श्रृंखला में सबसे हाल ही छानने आपरेशन समाप्त होता है और मिलान किया तत्वों के सेट रिटर्न पर इसकी पिछली स्थिति।

अद्यतन: अपने html स्निपेट के आधार पर, आप वास्तव में end बिल्कुल जरूरत नहीं है! JQuery के बारे में महत्वपूर्ण बात यह है कि अधिकांश गैर-ट्रैवर्सल विधियां स्वयं की प्रतिलिपि लौटती हैं - इसलिए यदि आप $ (this) .addClass ('test') कहते हैं, तो आपको $ (इस) की प्रतिलिपि मिलती है।

तो अपने टुकड़ा के लिए

:

// does not work 
var a = $(this)      // points at #test 
      .parent()     // now refers to the tr which holds test 
       .addClass('afb')  // still refers to the tr 
       .end()     // now we're back to #test 
      .children('.selectMe')  // empty! there are no direct children of #test which match .selectMe 
       .text();    // empty 

इसके बजाय, यह अंत के बिना प्रयास करें:

// works 
var a = $(this)      // points at #test 
      .parent()     // now refers to the tr which holds test 
       .addClass('afb')  // still refers to the tr 
      .children('.selectMe')  // found the .selectMe td 
       .text();    // returns '1' 
+0

अजीब जब मैं यह कर मैं पाठ के लिए एक मूल्य के अब और नहीं मिलता है। अगर मुझे ऐडक्लास की सवारी मिलती है और अंत में मैं करता हूं। – chobo2

+0

यदि आप एक HTML स्निपेट पोस्ट कर सकते हैं तो यह मदद करेगा ताकि हम जान सकें कि आप वास्तव में क्या प्रयास कर रहे हैं। आपकी टिप्पणी के आधार पर, ऐसा लगता है कि 'selectorHere' तत्व वास्तव में $ (इस) – Dexter

+0

के बच्चे के बजाय माता-पिता का प्रत्यक्ष बच्चा (यानी एक भाई या $ (यह)) है, बस एक उदाहरण जोड़ा गया है। – chobo2

7

आप end() विधि की तलाश में हैं। बस इसे goBackToParent() के स्थान पर उपयोग करें।

jQuery के डोम ट्रेवर्सल तरीकों एक jQuery वस्तु दृष्टान्त पर काम करते हैं और एक नया एक का उत्पादन, डोम तत्वों का एक अलग सेट मिलान के अधिकांश। जब ऐसा होता है, तो ऐसा लगता है कि तत्वों के नए सेट को स्टैक पर धक्का दिया जाता है जो ऑब्जेक्ट के अंदर बनाए रखा जाता है। प्रत्येक क्रमिक फ़िल्टरिंग विधि स्टैक पर एक नया तत्व सेट धक्का देती है। अगर हमें पुराने तत्व सेट की आवश्यकता है, तो हम स्टैक के पीछे सेट को पॉप करने के लिए एंड() का उपयोग कर सकते हैं।

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