2015-08-29 11 views
6

जबकि एक परियोजना मैं एक बग भर में भाग गया और इस अप्रत्याशित व्यवहार का पता चला पर काम कर रहा: यदि मैं एक स्ट्रिंग पर .replace() फोन और एक div .text() का उपयोग कर समारोह को बदलने के लिए परिणाम सेट.html() का उपयोग क्यों करता है यह अभिव्यक्ति बदलें?

काम करता है के रूप में मैं उम्मीद करते हैं।

हालांकि, अगर मैं स्ट्रिंग पर .replace() पर कॉल करता हूं और परिणाम .html() का उपयोग करके एक div पर सेट करता हूं, तो लक्षित टेक्स्ट को स्ट्रिंग में प्रतिस्थापित नहीं किया जाता है।

यहाँ मैं क्या मतलब है की एक उदाहरण है:

\t $('#result1').text('¤cyId'.replace('¤cyId','&currencyId')); // works 
 
\t $('#result2').html('¤cyId'.replace('¤cyId','&currencyId')); // doesnt work 
 

 
    var result = '¤cyId'.replace('¤cyId','&currencyId') 
 
\t $('#result3').text(result); // works 
 
\t $('#result4').html(result); // doesnt work
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="result1"></div><br> 
 
<div id="result2"></div><br> 
 
<div id="result3"></div><br> 
 
<div id="result4"></div>

मुझे लगता है कि .html() के बजाय .text() का उपयोग कर समस्या का समाधान होता है, लेकिन ...

इस क्यों होता है ?

+0

* "लक्षित टेक्स्ट स्ट्रिंग में प्रतिस्थापित नहीं किया गया है" * - नहीं, लक्षित टेक्स्ट * प्रतिस्थापित किया गया है। ऐसा तब होता है जब परिणाम HTML के रूप में माना जाता है जो आपकी समस्या का कारण बनता है। – nnnnnn

उत्तर

6

की जगह सिर्फ ठीक काम करता है होना चाहिए।

यह केवल लगता है कि गलत स्ट्रिंग तत्वों में समाप्त होता है क्योंकि &curren ब्राउज़र द्वारा ¤ में डीकोड है जब आप html विधि का उपयोग करें, तो &currencyId¤cyId के रूप में दिखाया गया है।

जब आप text विधि का उपयोग करते हैं तो टेक्स्ट HTML कोड के रूप में डीकोड नहीं किया जाता है, इसलिए .text("&currencyId") का प्रभाव .html("&amp;currencyId") जैसा ही होता है।

¤ वर्ण के लिए HTML इकाई &curren; है, लेकिन ब्राउज़र अर्धविराम के बिना &curren फ़ॉर्म भी स्वीकार करता है।

+0

आह, यह मेरे लिए कभी नहीं हुआ कि "ब्राउज़र अर्धविराम के बिना फॉर्म और curren भी स्वीकार करता है"। धन्यवाद! – DelightedD0D

1

क्योंकि & curren एक HTML इकाई है, और .html HTML इकाइयों को हल करता है जबकि .text उन्हें verbatim छोड़ देता है।

+0

कॉलन को न भूलें और अपना उत्तर प्रारूपित करें। –

+0

तो स्पष्ट होने के लिए, '.replace()' कथन हर बार काम करता है। – nnnnnn

1

html में

$('#result2').html('¤cyId'.replace('¤cyId','&amp;currencyId')); 

& कोशिश &amp;

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