2010-05-18 15 views
5

मेरे पास उत्पादों की एक सूची है। प्रत्येक उत्पाद में एक शीर्षक और एक समीक्षा लिंक है। वर्तमान में शीर्षक सीधे व्यक्तिगत उत्पाद पृष्ठ से लिंक करते हैं, और समीक्षा लिंक कहीं और जाते हैं।jQuery प्रत्येक लूप - चर का उपयोग

मैं प्रत्येक लीप के माध्यम से प्रत्येक लूप के लिए एक jquery का उपयोग करना चाहता हूं, शीर्षक से शीर्षक (पहला लिंक) ले लो, और इसे समीक्षा लिंक (दूसरा लिंक) पर लागू करें, इसलिए वे दोनों इंगित करते हैं उत्पाद पृष्ठ

सरलीकृत कोड इस प्रकार होगा:

<ul> 
    <li><a href="product1.html">Product 1</a><a href="review1.html">Review 1</a></li> 
    <li><a href="product2.html">Product 2</a><a href="review2.html">Review 2</a></li> 
    <li><a href="product3.html">Product 3</a><a href="review3.html">Review 3</a></li> 
</ul> 

मैंने सोचा कि यह निम्नलिखित की तरह कुछ होगा:

$("li").each(function(){ 
    var link = $("a:eq(0)").attr('href'); 
    $("a:eq(1)").attr("href", link); 
}); 

लेकिन यह हमेशा एक ही चर "लिंक" का उपयोग करता है।

क्या कोई मेरी मदद कर सकता है?

उत्तर

11

मैं एक तर्क each() पाश से प्रत्येक यात्रा के लिए संदर्भ के रूप में परिभाषित करने के लिए this गुजर रहा हूँ। प्रत्येक पुनरावृत्ति पर, this प्रश्न में तत्व को संदर्भित करता है।

$("li").each(function(){ 
    var link = $("a:eq(0)", this).attr('href'); 
    $("a:eq(1)", this).attr("href", link); 
}); 
+1

+1। – Gabriel

+2

शायद आपको यह समझाया जाना चाहिए कि दूसरा पैरामीटर जिसे आप '$()' (अर्थात् 'यह') पास करते हैं, चयनकर्ता के संदर्भ को परिभाषित करता है। –

3
$("li").each(function(){ 
    var link = $(this).find("a:eq(0)").attr('href'); 
    $(this).find("a:eq(1)").attr("href", link); 
}); 
0

इसकी क्योंकि आप अपने a चयन के संदर्भ के रूप में li उपयोग नहीं कर रहे:

इस प्रयास करें:

$("li").each(function(){ 
    var a = $('a',this); 
    var link = a.filter(":eq(0)").attr('href'); 
    a.filter(":eq(1)").attr("href", link); 
}); 
0

प्रयास करें:

$("li").each(function(){ 
    var link = $("a:eq(0)", this).attr('href'); 
$("a:eq(1)", this).attr("href", link); 
    }); 
1

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

यह इस प्रकार काम करता है:

$('li').find('a:nth-child(2)').attr('href', function(index, href) { 
    return $(this).prev('a').attr('href'); // use previous sibling's href 
}); 

मूलतः, यह, प्रत्येक तत्व है कि चयनकर्ता से मेल खाता लगेगा समारोह के माध्यम से इसे पारित, और फिर उस फ़ंक्शन के परिणाम पर href विशेषता निर्धारित किया है। फ़ंक्शन तर्क पारित किया जाएगा: पहला मिलान सूचकांक ($('li a:nth-child(2)')) में इसकी अनुक्रमणिका है, और दूसरा विशेषता का वर्तमान मान है। आपके विशेष मामले में, आपको या तो परवाह नहीं है, लेकिन अक्सर आप अपने वर्तमान मूल्य के आधार पर एक विशेषता को बदलना चाहते हैं, इसलिए यह आसान हो सकता है।

जो भी उपयोग करने के लिए पूरी तरह से स्वाद का विषय है, jQuery सेट आपको सीधे .each का उपयोग किए बिना बहुत सी चीजें करने की अनुमति देता है। संदर्भ तर्क के उपयोग के लिए

+0

कूल, इसके लिए चीयर्स - एक ही समस्या पर एक अलग लेने के लिए अच्छा लगा। यही कारण है कि मुझे jquery पसंद है :-) –

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