2012-02-04 12 views
5

अद्यतन: एक ब्राउज़र विशिष्ट व्यवहार की तरह लगता है के रूप में TimWolla टिप्पणी की - मैं कैसे नहीं छोड़ा जाएगा संस्करण के लिए सामान्य चाहिए, मज़बूती से एक क्रॉस-ब्राउज़र ढंग से?स्वचालित रूप से href विशेषता से बचने से jQuery .html() को कैसे रोकें?

HTML:

<div id="test"><a href="#{one}">#{two}</a></div> 

जे एस:

$('#test').html() 
=> <a href="#%7Bone%7D">#{two}</a> 

सूचना href में #{one} बच रहा है, जबकि #{two} नहीं है।

सिर्फ unescape पूरी स्ट्रिंग की तुलना में एक बेहतर तरीका है? http://jsfiddle.net/kenn/n8veL/

+3

ऐसा लगता है कि यह ब्राउज़र-विशिष्ट समस्या है। Googles v8 इंजन में यह ठीक काम करता है। – TimWolla

+0

वह एंकर एक टेम्पलेट प्रतीत होता है। आप डीओएम को टेम्पलेट क्यों पार्स कर रहे हैं? टेम्पलेट्स को स्रोत कोड में रखा जाना चाहिए (उदा। एससीआरआईपीटी तत्व के अंदर) और जावास्क्रिप्ट के साथ संसाधित किया जाना चाहिए (और केवल * फिर * ब्राउज़र द्वारा पार्स किया गया)। –

+0

टिमवॉला: अरे! प्रश्न अपडेट किया गया ... – kenn

उत्तर

0

तुम वैसे भी तत्व पर जावास्क्रिप्ट के माध्यम से एक विस्तार प्रदर्शन करने जा रहे हैं, तो आप एक अलग विशेषता में "href" टेम्पलेट रख सकते हैं:

unescape($('#test').html()) 
=> <a href="#{one}">#{two}</a> 

यहाँ उदाहरण है।

<a href='#dummy' data-href='#{template}'>Hi</a> 

तो बस डेटा विशेषता से विस्तार करने और वास्तविक "href" में परिणाम छोड़ देते हैं।

+1

एक सभ्य विचार की तरह लगता है, लेकिन दुर्भाग्य से मेरे मामले में यह इतना अच्छा नहीं है क्योंकि कुछ स्थिर पृष्ठों के लिए सर्वर-साइड में एक ही टेम्पलेट साझा किया जाता है, और सर्वर तर्क में जेएस व्यवहार को डुप्लिकेट करना अजीब लगता है। – kenn

+0

आह ठीक है, मैं देखता हूँ। खैर, शायद 'अनस्कैप() 'के अलावा अन्य कोई अच्छा काम नहीं है। – Pointy

1

सबसे पहले, मुझे शक है, अगर वहाँ अपने प्रश्न का एक विश्वसनीय समाधान है। अंतर्निहित कारण सरल है: क्योंकि नीचे Element.innerHTML गैर-मानक है और यह पूरी तरह से ब्राउज़र के कार्यान्वयन पर निर्भर करता है।

यदि आप एक विश्वसनीय समाधान चाहते हैं, तो मैं सुझाव दूंगा कि आप टेम्पलेट के बजाय डोम ऑपरेशंस का उपयोग करें।

+0

लेकिन यह भागने केवल "href" विशेषता पर किया जाता है। अन्य गुण उसी तरह प्रभावित नहीं होंगे। – Pointy

+0

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

+0

ठीक है, लेकिन मैंने कोशिश की कोई ब्राउज़र "डेटा-href" विशेषता से बच निकला है। यह वास्तव में कोई फर्क नहीं पड़ता कि टेम्पलेट को तत्व पर रखा गया है, आखिरकार। निश्चित रूप से विशेषता मानों में HTML मेटाएक्टएक्टर्स के साथ हमेशा समस्याएं होंगी, लेकिन सरल टेम्पलेट्स के लिए इसे काम करना चाहिए। – Pointy

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