2010-10-22 10 views
10

मुझे लगता है कि एक भी बोली में शामिल विशेषता मान सेट करने के लिए कोशिश कर रहा हूँ:क्या एचटीएमएल विशेषता मानों के अंदर सिंगल/डबल कोट्स की अनुमति है?

var attr_value = "It's not working"; 
var html = "<label my_attr='" + attr_value + "'>Text</label>"; 
$('body').html(html); 

हालांकि, मैं निम्नलिखित परिणाम प्राप्त:

<label working="" not="" s="" my_attr="It">Text</label> 

मैं इसे कैसे ठीक कर सकता है?

विशेषता मानों के अंदर डबल कोट्स की अनुमति है? विशेषता परिसीमक के रूप में

उत्तर

17

हाँ, दोनों उद्धरण विशेषता मान में अनुमति दी जाती है, लेकिन आप बोली आप एक विशेषता मान परिसीमक के रूप में प्रयोग कर रहे हैं, साथ ही अन्य HTML-विशेष वर्ण HTML-पलायन करना होगा जैसे < और &:

function encodeHTML(s) { 
    return s.split('&').join('&amp;').split('<').join('&lt;').split('"').join('&quot;').split("'").join('&#39;'); 
} 

var html= '<label my_attr="'+encodeHTML(attr_value)+'">Text</label>'; 

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

$('body').append(
    $('<label>', {my_attr: attr_value, text: 'Text'}) 
); 
+0

एक विस्तृत उत्तर के लिए बहुत बहुत धन्यवाद! 'एनकोड HTML 'के कार्यान्वयन के संबंध में जिज्ञासा के लिए: इसे' प्रतिस्थापन 'फ़ंक्शन का उपयोग करके कार्यान्वित किया जा सकता है, है ना? क्या यह कम प्रभावी है? –

+0

यह सुनिश्चित कर सकता है, 'प्रतिस्थापित करें (/ &/g,' & ') ... '। इस मामले में इससे कोई फर्क नहीं पड़ता क्योंकि सर्च स्ट्रिंग में कोई रेगेक्स-विशेष वर्ण नहीं हो सकते हैं, लेकिन सामान्य रूप से सादे स्ट्रिंग के लिए 'स्प्लिट'/'जॉइन' को प्रतिस्थापित करना आसान हो सकता है, क्योंकि आप खोज स्ट्रिंग का उपयोग किए बिना कर सकते हैं regex-escaping के बारे में चिंता करें। तुलनात्मक प्रदर्शन ब्राउज़र भर में भिन्न होता है। – bobince

+0

धन्यवाद! क्या आप मुझे "निर्माण शॉर्टकट" ट्यूटोरियल के लिए एक सूचक दे ​​सकते हैं? –

2
var attr_value = "It&#39;s not working" 
2

उपयोग डबल उद्धरण:

var html = "<label my_attr=\"" + attr_value + "\">Text</label>"; 
8

आप दोहरे उद्धरण चिह्नों या एकल उद्धरण के अंदर दोहरे उद्धरण चिह्नों के अंदर एक उद्धरण चिह्नों का उपयोग कर सकते हैं। यदि आप सिंगल कोट्स या डबल कोट्स के अंदर डबल कोट्स के अंदर सिंगल कोट्स का उपयोग करना चाहते हैं, तो आपको HTML को एन्कोड करना होगा।

मान्य मार्कअप:

<label attr="This 'works'!" /> 
<label attr='This "works" too' /> 
<label attr="This does NOT \"work\"" /> 
<label attr="And this is &quot;OK&quot;, too" /> 
+0

एक बैकस्लैश साथ काम नहीं करता: इसके बजाय, attr(), text() तरह डोम शैली के तरीकों और निर्माण शॉर्टकट का उपयोग करें। यह जावास्क्रिप्ट से बच है, HTML नहीं। – bobince

+0

आप सही हैं, मैंने अपनी प्रतिक्रिया संपादित की और भागने को हटा दिया। – CodeTwice

+0

आप बस '<' '' लेबल 'में बंद हो गए हैं और यह " ठीक ", भी /> ', या मैं गलत हूं? – yckart

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