2013-08-26 5 views
6

मेरे पास एक ऐसा पृष्ठ है जो हर बार इनपुट फ़ील्ड की आईडी बदलता है। तो उदाहरण के लिए यदि मैं अब पेज पर जाता हूं, तो आईडी "stack_15_overflow" हो सकती है और अगली बार यह "stack_293_overflow" हो सकती है।किसी getElementById (stack_ * _overflow) के बीच में किसी भी वर्ण को कैसे स्वीकार करें?

मैं "stack_ * _overflow" जैसे (जहां * कुछ भी मेल खाता है), कोई बात नहीं क्या पाठ के बीच में है किसी भी इनपुट क्षेत्र शुरू से संबंधित और कुछ विशिष्ट पाठ के साथ समाप्त, कि मूल्य प्राप्त करने के getElementById के लिए वाइल्डकार्ड के मूल्य का उपयोग करना चाहते,।

कोड:

function HelloId(string){ 
    var name=string 
    document.getElementById('stack_*_overflow').value=name; 
} 
+4

यदि आप एचटीएमएल को कक्षा का उपयोग करते हैं और यह "अजीब" चयनकर्ता सामान नहीं करते हैं। यह एक साधारण कॉल है। – epascarello

+0

इसे पढ़ें, यह भी मदद करेगा http://stackoverflow.com/questions/5376431/wildcards-in-jquery- चयनकर्ता –

उत्तर

5
var elements = document.querySelectorAll('[id^="stack_"][id$="_overflow"]'); 
+0

क्यों 'querySelectorAll'? यह 'id' द्वारा तत्व प्राप्त कर रहा है, जो केवल 1 तत्व लौटा सकता है ... – Ian

+1

@Ian' * 'एक वाइल्डकार्ड (प्रश्न में) है। यह कई अलग-अलग आईडी के साथ कई तत्वों का चयन करेगा। – Paulpro

+1

@Ian, ठीक है मुझे लगता है कि वह एक ही पैटर्न के बाद अलग-अलग आईडी के साथ कई इनपुट प्राप्त कर सकता है। यहां 'querySelectorAll' का उपयोग अधिक पूछताछ योग्य है क्योंकि OP पहले से ही jQuery का उपयोग करता है। – plalx

5

का उपयोग jQuery के attribute starts with और attribute ends with चयनकर्ताओं:

$("[id^='stack'][id$=overflow]"); 

ध्यान दें कि इन चयनकर्ताओं महंगे हैं, तत्व के प्रकार को निर्दिष्ट करने के प्रदर्शन में सुधार कर सकते हैं:

$('element').filter("[id^='stack'][id$=overflow]"); 
+0

क्या आप इस" विस्तारशीलता "के बारे में हैं? मैं ' मुझे यकीन है कि 'querySelectorAll' इन विशेषता चयनकर्ताओं का मूल रूप से समर्थन करता है, इसलिए मुझे नहीं लगता कि आप' .filter() 'का उपयोग कर 2 डोम क्वेरी क्यों मजबूर करना चाहते हैं, यह * कस्टम jQuery चयनकर्ता * के लिए अलग होगा। इसके अलावा, मुझे पूरा यकीन है कि चयनकर्ता का दाएं से बाएं से मूल्यांकन किया जाता है, इसलिए 'तत्व' भाग जोड़ना कुछ भी तेज़ नहीं होता है, यह केवल परिणाम सेट को फ़िल्टर करता है। हालांकि मैं उस हिस्से के बारे में गलत हो सकता हूं - यह तब हो सकता है जब आप चयनकर्ता में एक जगह है, कि उन हिस्सों का मूल्यांकन दाएं से बाएं से किया जाता है - लेकिन प्रत्येक "समूह" का मूल्यांकन बाएं से दाएं – Ian

2

आप getElementById का उपयोग करके इस लक्ष्य को हासिल नहीं कर सकते। एक बेहतर समाधान querySelector या querySelectorAll होगा, जहां आपको सीएसएस चयनकर्ताओं के लिए पूर्ण समर्थन मिलता है।

Reference at MDN

आप इनमें से 2 की आवश्यकता होगी विशेषता चयनकर्ताओं:

तत्वों है कि एक विशेष तार के साथ शुरू

document.querySelector('[id^="stack_"]'); 

हो जाओ तत्वों कि एक विशिष्ट स्ट्रिंग

शामिल हो जाओ
document.querySelector('[id*="stack_"]'); 

तत्वों जाओ कि एक विशिष्ट स्ट्रिंग

document.querySelector('[id$="_overflow"]'); 

साथ समाप्त होता है समाप्त होता है के संयोजन से और शुरू होता है चयनकर्ताओं पर आपको निम्न प्राप्त करने और अपने वांछित परिणाम प्राप्त करने में सक्षम हैं:

document.querySelector('[id^="stack_"][id$="_overflow"]'); 

हैप्पी कोडिंग!

+0

से किया जाता है, धन्यवाद, एक आकर्षण की तरह काम करता है! – Byzantine

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