2011-01-24 7 views
5

मैंने div की लंबी सूची में प्रत्येक चौथे तत्व से दाएं मार्जिन को हटाने के लिए jQuery :nth-child() चयनकर्ता का सफलतापूर्वक उपयोग किया है। यह इस तरह दिखता है:jQuery का उपयोग कर हर चौथे दृश्य तत्व पर सही मार्जिन निकालें?

$(".myDivClass:nth-child(4n+4)").css("margin-right", 0); 

लेकिन पेज भी उपयोगकर्ता बातचीत (jQuery के माध्यम से) और चीजें हैं जो उपयोगकर्ता कर सकते हैं छिपाने/शो तत्वों में से एक है के लिए खुला है। जब कोई तत्व छुपाया जाता है, तो इसकी शैली "डिस्प्ले: कोई नहीं" पर सेट होती है। तत्वों जारी कर रहे हैं, इसलिए यदि आप एक पंक्ति के बीच में एक तत्व निकालने के लिए, पंक्ति से एक तत्व के नीचे, इस तरह कूद जाएगा:

Problem with margin when an element is removed

मेरी पहली सोचा पहले से पूरी बात फिर से करना था सभी तत्वों के लिए मार्जिन जोड़ना और फिर इसे प्रत्येक चौथे दृश्य तत्व से हटा दें; कुछ इस तरह:

$(".myDivClass").css("margin-right","20px"); 
$(".myDivClass:visible:nth-child(4n+4").css("margin-right", 0); 

लेकिन दूसरी पंक्ति कुछ नहीं करता है और मुझे नहीं लगता कि आप ऊपर

उदाहरण की तरह छद्म चयनकर्ताओं ढेर कर सकते हैं इस समस्या का एक समाधान है (?)? क्या ऐसा करने के लिए इससे अच्छा तरीका है?

अग्रिम धन्यवाद!

/थॉमस

+0

हो सकता है कि आप उस क्लास का उपयोग करने का प्रयास करें जिसे आप जोड़ना और निकालना आसान बनाना चाहते हैं? और हाँ आप छद्म चयनकर्ताओं को ढेर करने में सक्षम होना चाहिए – Mottie

उत्तर

5

मैं जानता हूँ कि यह सीधे अपने प्रश्न का उत्तर नहीं है, लेकिन जब मैं उन दोनों के बीच कुछ अंतर के साथ ब्लॉक तत्वों का एक समूह चल के साथ इसी तरह बातें करते हैं, मैं आमतौर पर उन सभी को पर मार्जिन रखना होगा लेकिन अपने माता-पिता के कंटेनर को (इस मामले में) नकारात्मक मार्जिन-दाएं तत्वों के बीच की दूरी के बराबर बनाते हैं।

इस तरह माता-पिता अभी भी फिट होंगे जहां आप इसे चाहते हैं लेकिन बच्चे बस तैर जाएंगे क्योंकि उन्हें आवश्यक स्थान के साथ चाहिए।

+0

यह मेरे लिए ठीक काम करेगा क्योंकि जिस समाधान को मैं ढूंढ रहा हूं वह केवल लेआउट उद्देश्यों के लिए है। मैं कोशिश करूँगा! – tkahn

+0

मैंने कोशिश की और लेआउट काम करता है, लेकिन मुझे अभी भी ब्राउज़र विंडो में एक क्षैतिज स्क्रॉलबार मिलता है जो इंगित करता है कि कंटेनर इससे बड़ा होना चाहिए? – tkahn

+0

शायद कंटेनर को दूसरे रैपर div में डालना। यह शायद अतिप्रवाह के साथ: छुपा ;? परीक्षण के लिए किसी भी कोड के बिना निश्चित रूप से कहना मुश्किल है। – nemophrost

1

हम्म, ठीक nth-child() चयनकर्ता एकदम सही ढंग से कार्य नहीं भी कर रहा है। ऐसा लगता है कि छिपा तत्वों को नजरअंदाज कर दिया गया है। तो आपको बंद तत्वों को .remove() या .detach() करना पड़ सकता है। यहां एक demo है, लेकिन यह डेमो उद्देश्यों के लिए इसे और अधिक दृश्यमान बनाने के लिए मार्जिन के बजाय सीमा को संशोधित करता है।

$('.box:visible:nth-child(5n+5)').addClass('noSide'); 

$('.close').click(function() { 
    // needs to be removed or detached because the nth child 
    // appears to ignore hidden elements 
    $(this).parent().detach(); 
    $('.noSide').removeClass('noSide'); 
    $('.box:visible:nth-child(5n+5)').addClass('noSide'); 
}); 
+0

यह वास्तव में इरादे के अनुसार काम करता है। चूंकि यह उत्तर बताता है - http://stackoverflow.com/questions/2175694/jquery-nth-child-that-is-currently-visible - दस्तावेज़ स्थिति: "के साथ: nth-child (n), सभी बच्चों की गणना की जाती है , चाहे वे क्या हैं [...] "। – polarblau

+0

हां, मुझे लगता है कि: nth-child() चयनकर्ता काम कर रहा है जैसा कि इसे चाहिए और जैसा कि ध्रुवीय बिंदु बताता है, मेरे मामले में समस्या यह है कि यह उन तत्वों की गणना करता है जो छिपे हुए हैं, न कि यह उन्हें अनदेखा करता है। किसी भी मामले में, मुझे नहीं लगता कि मैं निकालें() या detach() का उपयोग कर सकता हूं क्योंकि यदि उपयोगकर्ता उन्हें फिर से दिखाना चुनता है तो मुझे उसी स्थिति में तत्वों को फिर से प्रदर्शित करने में सक्षम होना चाहिए। – tkahn

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