रिक्त स्थान के साथ jquery आईडी


127

क्या किसी को पता है कि jQuery के साथ ID द्वारा DOM में किसी आइटम का चयन कैसे किया जाता है, जब उस ID में कोई स्थान होता है?

उदाहरण के लिए, मेरे आइटम की आईडी होगी

<div id="content Module">Stuff</div>

मैं इसे jQuery के साथ कैसे चुनूंगा?

अगर मैं बस करूँ

$("#content Module").whatever() 

jQuery कंटेंट की आईडी और मॉड्यूल की आईडी दोनों के साथ एक आइटम खोजने की कोशिश करेगा, जो कि मैं नहीं देख रहा हूं।

मुझे यह जोड़ना चाहिए कि मैं एक पुराने कोड आधार के साथ काम कर रहा हूं, जहां इन दो शब्द आईडी का बड़े पैमाने पर उपयोग किया जाता है, इसलिए सभी आईडी को बदलना और बदलना खराब होगा।


@ Glavić आपके सभी कथन सत्य हैं। हालाँकि, नया स्वीकृत उत्तर उन लोगों के लिए अधिक मददगार होगा जिन्हें वास्तव में इस समाधान की आवश्यकता है। उन लोगों के लिए जो वास्तव में फंस गए हैं, यह जानना कि रिक्त स्थान से कैसे निपटना है, उन्हें वास्तव में क्या चाहिए।
जेफ डेविस

हां, यह सच है, लेकिन मेरे जवाब में आईडी के रिक्त स्थान के साथ समाधान भी है, यह भी बोल्ड किया गया है;)
Glavić

1
आईडी के बजाय सही ढंग से आईडी लिखने के लिए अपवोट करें। क्षमा करें, पालतू पशु। और हाँ, मैं ज्यादातर लोगों acronyms और छोटा शब्द pluralize के लिए एक apostrophe का उपयोग पता है, लेकिन यह अभी भी एक पंसारी की apostrophe तरह लग रहा है मेरे लिए walkinthewords.blogspot.com/2009/05/grocers-apostrophe.html
जुआन मेंडेस

जवाबों:


253

एक विशेषता चयनकर्ता का उपयोग करें।

$("[id='content Module']").whatever();

या, बेहतर, टैग भी निर्दिष्ट करें:

$("div[id='content Module']").whatever();

ध्यान दें कि $ ('# id') के विपरीत, यदि आपके पृष्ठ में एक ही आईडी के साथ कई तत्व हैं, तो यह कई तत्वों को लौटाएगा।


1
यहां तक ​​कि Glavic से जवाब सबसे अच्छा सुझाव है। मुझे लगता है कि इस जवाब से समस्या हल हो गई :)
GusDeCooL

8
इसने मुझे एक बहुत मदद की। मैं अजाक्स के माध्यम से कुछ भयानक HTML में पढ़ रहा हूं और HTML की संरचना या आईडी के प्रारूप पर कोई नियंत्रण नहीं है। उनकी आईडी में जगह है, इसलिए इलियट का जवाब काफी मदद करता है, जबकि ग्लैविक के प्रस्ताव में कोई मदद नहीं मिलती है।
दिनकर

धन्यवाद, शानदार जवाब!
एल्कॉफोह

62

रिक्त स्थान का उपयोग न करें, इसका कारण सरल है, अंतरिक्ष चरित्र ID विशेषता के लिए मान्य नहीं है।

ID टोकन को एक अक्षर ([A-Za-z]) से शुरू होना चाहिए और किसी भी संख्या में अक्षरों, अंकों ([0-9]), hyphens ("-"), अंडरस्कोर ("_"), कॉलनों के बाद होना चाहिए (":"), और अवधियों ("।")।

लेकिन अगर आप मानकों के बारे में परवाह नहीं करते हैं तो कोशिश करें $("[id='content Module']")

समान थ्रेड> HTML में आईडी विशेषता के लिए मान्य मान क्या हैं?

संपादित करें: कैसे HTML 4.01 और HTML5 के बीच आईडी अलग है

HTML5 आईडी विशेषता पर अतिरिक्त प्रतिबंधों से छुटकारा पाता है। केवल आवश्यकताएं शेष हैं - दस्तावेज़ में अद्वितीय होने के अलावा - यह हैं कि मूल्य में कम से कम एक वर्ण होना चाहिए (खाली नहीं हो सकता), और इसमें कोई भी स्थान वर्ण नहीं हो सकते।

लिंक: http://mathiasbynens.be/notes/html5-id-class


4
+1। नामकरण मानकों का पालन करना और फिर जब आप उनका पालन नहीं करते हैं तो आपको वर्कअराउंड के साथ आने की जरूरत नहीं है।
मैट बी

इसने दूसरे शब्द को प्रदर्शन पर काट-छाँट करने के विचार को ट्रिगर किया ताकि मेरे पास वैध आईडी हो। मुद्दे का ध्यान रखा, धन्यवाद!
जेफ डेविस

1
आप यहाँ HTML 4.01 कल्पना को उद्धृत कर रहे हैं। हालांकि यह अभी भी आईडी विशेषता मूल्यों में अंतरिक्ष पात्रों का उपयोग करने की अनुमति नहीं है, एचटीएमएल 5 इन प्रतिबंधों से अधिकांश से छुटकारा दिलाता है
Mathias Bynens

2
आदमी को यह मत कहो कि किसी पुराने प्रोजेक्ट के पूरे कोडबेस को सिर्फ "मानकों" के जरिए काटो। अधिक से अधिक, यह एक टिप्पणी का मूल्यांकन करना चाहिए, निश्चित रूप से स्वीकृत जवाब नहीं :(
कोडर

मजेदार। रिक्त स्थान ज्यादातर उद्देश्यों के लिए ठीक काम करते हैं, उन्हें अनस्टेन्ड क्यों बनाते हैं?
Lodewijk

23

बस किसी के उत्सुक होने पर, मैंने पाया कि अंतरिक्ष से भागने से काम चलेगा। यह विशेष रूप से तब उपयोगी होता है जब आपके पास लक्ष्य DOM पर नियंत्रण नहीं होता है (उदाहरण के लिए उपयोगकर्तास्क्रिप्ट में):

$("#this\\ has\\ spaces");

डबल-बैकस्लैश पर ध्यान दें, जिसकी आवश्यकता है।


फिर 4 बैकस्लैश तक यदि जावास्क्रिप्ट स्वयं किसी अन्य भाषा में एक स्ट्रिंग स्थिरांक है।
ब्रिलिएंड

2
फिर 8
बैकस्लैम

1
यह एक स्टैक अतिप्रवाह है जब स्ट्रिंग पुनरावृत्ति से बच जाती है
जेफ डेविस

7

जिस विधि से क्रिस ने सुझाव दिया है वह संभवतः jQuery के कार्यों के साथ काम करने के लिए अनुकूलित किया जा सकता है।

var element = document.getElementById('content Module');
$(element) ... ;

1
आह! आगे स्क्रॉल करना चाहिए था!
गनोमेनर्स

2

प्रयास करने के लिए एक विचार:

$("#content" + &amp;#032; + "Module").whatever()

$("#content" + %20 + "Module").whatever()

अर्धविराम एक जावास्क्रिप्ट त्रुटि का कारण हो सकता है। मैं कोई स्थान नहीं होने के लिए आईडी बदलने की भी सलाह देता हूं।

भी आज़माएं document.getElementByID("content Module")


1
document.getElementByID मुझे नियमित वस्तु देगा और फिर मैं वह jQuery फ़ंक्शन नहीं कर सका जिसकी मुझे तलाश है। हालाँकि, ऐसी ही परिस्थितियों में जो कि एक अच्छा काम होगा।
जेफ डेविस

1
$(document.getElementByID("content Module"))आप एक jquery वस्तु नहीं देंगे?
गोमेनर्स

1

इसने मेरे लिए काम किया।

document.getElementById(escape('content Module'));

0

जबकि HTML में ID विशेषता मान में स्थान होना तकनीकी रूप से अमान्य है , आप वास्तव में इसे jQuery का उपयोग करके चुन सकते हैं।

Http://mothereffingcssescapes.com/#content%20module देखें :

<script>
  // document.getElementById or similar
  document.getElementById('content module');
  // document.querySelector or similar
  $('#content\\ module');
</script>

jQuery चयनकर्ताओं एपीआई-जैसे सिंटैक्स का उपयोग करता है, इसलिए आप $('#content\\ module');तत्व का चयन करने के लिए उपयोग कर सकते हैं id="content module"

सीएसएस में तत्व को लक्षित करने के लिए, आप इसे इस तरह से बच सकते हैं:

<style>
  #content\ module {
    background: hotpink;
  }
</style>

0

यह काम कर सकता है यदि आप चाहते हैं कि तत्व में आईडी का सटीक मूल्य हो

$("[id='content Module']").whatever();

लेकिन अगर आप जांचना चाहते हैं कि तत्व में उनमें से केवल एक (जैसे कक्षा) अन्य आईडी के साथ या उसके बिना है

$("[id~='content']").whatever();

अगर यह इस तत्व का चयन करेंगे id="content"या id="content Module"याid="content Module other_ids"


0

मैंने अपने मामले के लिए पाया कि भागने से काम नहीं चला क्योंकि यह 20% के साथ रिक्त स्थान को बदल देता है। मैंने सूची आइटम के पाठ के साथ पृष्ठ के h1 को बदलने के लिए उदाहरण के बजाय प्रतिस्थापित किया। यदि मेनू में है:

<li id="Contact Us"\>Contact Us</li>

function setTitle(menu) {
    $("h1").text( $("li#" + menu.replace(" ", "\\ ")).text() );
}

0

मैं jQuery में अल्पविराम और / या रिक्त स्थान वाले तत्व आईडी के साथ समस्या कर रहा था, इसलिए मैंने ऐसा किया और यह एक आकर्षण की तरह काम करता है:

var ele = $(document.getElementById('last, first'));

इसमें स्थान हैं और काम नहीं करता है:

var ele = $('#last, first');

यह अल्पविराम है और काम नहीं करता है:

var ele = $('#last,first');


0

चयनकर्ता (रिक्त स्थान के साथ) पर किसी भी गलत चरित्र से बचना ।

var escapeSelector = function(string) {
  string = string||"";
  if (typeof string !== 'string') return false;
    return string.replace( /(:|\.|\[|\]|,|=|@|\s|\(|\))/g, "\\$1" );

}
console.log($("div[data-id="+escapeSelector("Document (0).json")+"]").text());   
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div data-id="Document (0).json">Howdy</div>

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.