2009-06-27 9 views
7

यदि मेरे पास दो divs थे, तो id = "myDiv"डुप्लिकेट आईडी के स्क्रू अप jquery चयनकर्ता करता है?

$("#myDiv").fadeOut(); दोनों divs बाहर फीका होगा? या यह केवल पहले/दूसरे फीका होगा? या कोई भी नहीं?

मैं यह कैसे बदलूं कि यह किस प्रकार से निकलता है?

नोट: मैं जानता हूँ कि डुप्लिकेट आईडी के मानकों के खिलाफ है, लेकिन मैं fancybox मोडल पॉपअप का उपयोग कर रहा है और यह पॉपअप की सामग्री के लिए अपने पृष्ठ पर उल्लिखित सामग्री डुप्लिकेट। अगर कोई इस के आसपास एक रास्ता जानता है (शायद मैं fancybox गलत का उपयोग कर रहा हूँ) कृपया मुझे बताएं।

+1

क्या आपने इसे आजमाया है? –

+0

हां, लेकिन मैं उम्मीद कर रहा था कि अगर मैंने किसी और से पूछा तो वे मुझे एक स्पष्टीकरण दे सकते हैं कि क्यों केवल पहला ही फीका हो जाता है। – Matt

+0

क्या यह डुप्लिकेट करता है? या सामग्री को अपने पॉपअप स्थिति में "स्थानांतरित करें"? – scunliffe

उत्तर

6

jQuery आईडी के लिए पूछताछ करते समय बिल्कुल एक तत्व से मेल खाता है। Element ऑब्जेक्ट की एक सरणी $("#foo").get() द्वारा वापस की जाएगी। अधिक जानकारी के लिए jQuery documentation देखें, या इसे स्वयंमाएं।

$(function() { 
    alert($("#foo").length); 
}); 
+0

$ ("# foo") एक सरणी नहीं लौटाता है। यह एक ऑब्जेक्ट देता है जिसमें कई फ़ंक्शन होते हैं। $ ("# foo")।() एक सरणी है। –

+0

वास्तव में आप jquery ऑब्जेक्ट उदा। $ ('। Foo') [0] को इंडेक्स कर सकते हैं। क्या यह इसे एक सरणी बनाता है;) – redsquare

+0

जैसा कि रेडस्क्वेयर ने कहा था, आप सबस्क्रिप्ट का उपयोग कर तत्वों तक पहुंच सकते हैं, और jQuery भी "लंबाई" संपत्ति प्रदान करता है। उस अर्थ में आप इसे एक सरणी की तरह इलाज कर सकते हैं। हालांकि, अन्य सरणी फ़ंक्शन (जैसे पॉप, जॉइन इत्यादि) प्रदान नहीं किए जाते हैं। मैथ्यू ने बताया कि मैने फंक्शन को शामिल करने के लिए अपना जवाब अपडेट किया। –

11

तत्व आईडी अद्वितीय होने वाली हैं। एक ही आईडी के कई डीआईवी होने के कारण गलत और अप्रत्याशित होगा, और आईडी के उद्देश्य को खारिज कर देगा। आप इस किया है:

$('.myDiv').fadeOut(); 

कि उन दोनों कम हो गए, यह मानते हुए आप उन्हें myDiv और अद्वितीय आईडी (या बिल्कुल भी नहीं) के एक वर्ग दे।

7

:

तो यह मत करो "ध्यान दें मैं जानता हूँ कि डुप्लिकेट आईडी के मानकों के खिलाफ है।" आप पहले ही दो समस्याओं का पता लगा चुके हैं। यह मानकों का उल्लंघन करता है, और यह jQuery के (और वास्तव में नियमित डीओएम) चयन तंत्र में हस्तक्षेप करता है। भविष्य में शायद अधिक समस्याएं होंगी।

काफी संभवतः, हैं fancybox गलत का उपयोग करते हुए, इस मामले में मुझे उम्मीद है कि इससे परिचित कोई आपकी मदद करेगा। या बदतर, यदि स्क्रिप्ट स्वयं त्रुटिपूर्ण है, तो आपको इसका उपयोग नहीं करना चाहिए।

+0

के अंदर तो मुझे अपना खुद का मोडल पॉपअप लिखना है? मुझे पता है कि मैं अकेला नहीं हूं जो फैंक्सबॉक्स का उपयोग करता है। यह वास्तव में मेरे प्रश्न का उत्तर नहीं दिया ... – Matt

+0

मैंने कभी सुझाव नहीं दिया कि आप अपना खुद का मोडल संवाद लिखें। –

0

मैं एक ही समस्या में भाग गया। जाहिर है, जब आप उस पृष्ठ पर सामग्री बनाते हैं जहां से आप एक Fancybox खोलना चाहते हैं, तो यह मूल सामग्री का दर्पण div बनाता है। (

$ ': मेरे उदाहरण में, नियंत्रण एक div कि fancybox, "fancy_div"

मैं नियंत्रण का चयन करके उसे चयनकर्ता के लिए निम्न स्वरूप का उपयोग करके मूल्य है प्राप्त करने में सक्षम था नामित बनाता में लिपटे रहे थे #fancy_div [id = इनपुट टेक्स्ट] ')। वैल();

आपके नियंत्रण फ़ैन्सीबॉक्स के भीतर कहीं और मौजूद हो सकते हैं। करने के लिए सबसे अच्छी बात दृश्य स्रोत को देखो, लेकिन यह मुश्किल है।

दृश्य स्रोत के लिए प्राप्त करने के लिए निम्न तकनीक का उपयोग करें: प्राप्त मूल्य आपके प्रपत्र खोलें चेतावनी विंडो खोलने के लिए टैग पर क्लिक करें: अपने फार्म पर प्लेस इस टैग।
सुनिश्चित करें कि आपका कर्सर पृष्ठ सामग्री के भीतर है (नियंत्रण ढूंढें और क्लिक करें)।
नियंत्रण से बाहर राइट क्लिक करें और "स्रोत देखें" का चयन करें।
divs का एक गुच्छा मौजूद है, इसलिए अपनी सामग्री वाले div की तलाश करें।

उम्मीद है कि इससे मदद मिलती है।

1

के बाद से $ ('# myDiv') केवल कि आईडी के साथ पहली div वापस आ जाएगी, तो आप उस आईडी इस चाल का उपयोग कर के साथ सभी तत्वों को ढूंढना होगा:

$('[id=myDiv]'); 

तो, आपके मामले के लिए, उन divs सभी के लिए fadeOut लागू करने के लिए:

$('[id=myDiv]:gt(0)').remove(); 
:

$('[id=myDiv]').fadeOut(); 

और आप सुनिश्चित करें कि आपके पेज इस आईडी दो बार नहीं है तो आप ऐसा करके अतिरिक्त लोगों को निकाल सकते हैं करना चाहते हैं

+0

मुझे लगता है कि हर कोई इस बात से सहमत है कि डुप्लिकेट आईडी होने से आप सबसे बुरी चीजों में से एक हो सकते हैं (छोटे बिल्ली के बच्चे को दर्द होता है और दुखी पांडा बनाते हैं)। हालांकि, इस चाल ने मुझे लिखे गए एक छोटे उपयोगिता वेब ऐप में थोड़ा बग ठीक करने में मदद की। असल में, मेरे पास छिपे हुए टेबल हैं जो टेम्पलेट्स के रूप में कार्य करते हैं (मैं उन्हें नए उत्पन्न करने के लिए कॉपी करता हूं) और उन टेम्पलेट्स में आईडी हैं क्योंकि मैं क्लाइंट पक्ष पर अनुवाद करने के लिए उन आईडी का उपयोग करता हूं (हाँ, मुझे जावास्क्रिप्ट के साथ कुछ मजा आता है^^) – dSebastien

1

आप ढूंढने() का उपयोग करने के मार्ग भी जा सकते हैं। कि आईडी के साथ सभी तत्वों को वापस आ जाएगी, और की जरूरत है जहां की तरह $(document).find('#myDiv').fadeOut();

या

$('.parentElement').find('#myDiv').fadeOut(); 
0

मैं हाल ही में एक ऐसी ही समस्या थी कुछ और प्रयास करें कि आप किसी विशेष माता-पिता के लिए दायरा सीमित कर सकते हैं। मेरे पास एक ऐसा पृष्ठ था जो अजाक्स लोड के माध्यम से अलग-अलग सामग्री प्रदर्शित करता था। एक बटन है जो सर्वर को पीडीएफ छवि उत्पन्न करने के लिए ट्रिगर करता है।

मेरा मूल समाधान कक्षा चयनकर्ता का उपयोग करना था, जो ठीक काम करता था, लेकिन किसी अन्य डेवलपर के साथ घर्षण का कारण बनता था। लिंक में पहले से ही इतने सारे वर्ग थे कि पहचानकर्ता के रूप में कक्षा का उपयोग करने से कोड बदसूरत हो गया। तो मैंने एक नाम विशेषता का उपयोग किया:

<a name="printButton".... 

$('a[name="printButton"]').on('click',function(){.... 

केवल बेवकूफ काम किया!

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