2012-03-07 43 views
8

मैं डीओएम से अपने विशेषताओं के साथ एक निश्चित टैग तत्व पुनर्प्राप्त करना चाहता हूं। उदाहरण के लिए, सेविशेषताएँ सहित ओपन टैग प्राप्त करें - बाहरी HTML के बिना बाहरी HTML

<a href="#" class="class"> 
    link text 
</a> 

मैं <a href="#" class="class"> प्राप्त करने के लिए, वैकल्पिक रूप से एक बंद करने </a> साथ, या तो एक स्ट्रिंग या किसी अन्य वस्तु के रूप में चाहते हैं। मेरी राय में, यह .innerHTML के बिना .outerHTML को पुनर्प्राप्त करने के समान होगा।

अंत में, मुझे jQuery के माध्यम से कुछ अन्य तत्वों को लपेटने की आवश्यकता है। मैंने

var elem = $('#some-element').get(0); 
$('#some-other-element').wrap(elem); 

लेकिन .get() अपनी सामग्री सहित डीओएम तत्व लौटाता है। इसके अलावा

var elem = $('#some-element').get(0); 
$('#some-other-element').wrap(elem.tagName).parent().attr(elem.attributes); 

विफल रहता है के रूप में elem.attributes एक NamedNodeMap जो jQuery के attr() साथ काम नहीं करता वापस आती है और मैं इसे परिवर्तित करने के लिए सक्षम नहीं था। स्वीकार किया गया है कि उपरोक्त उदाहरण बहुत समझदार नहीं हैं क्योंकि वे तत्व की नो-लम्बी-अद्वितीय आईडी भी कॉपी करते हैं। लेकिन क्या कोई आसान तरीका है? बहुत बहुत धन्यवाद।

+0

बस '.clone()' के साथ नोड क्लोन करें, फिर इसे '.html()' के साथ खाली करें और 'आईडी'' और आप और क्या चाहते हैं उसे हटा दें। – kirilloid

+0

$ ("ए") क्लोन() खाली()। Attr ("बाहरी HTML"); पहली समस्या को हल करने के लिए – Tuscan

+0

धन्यवाद @kirilloid, अनुमान है कि जोश बस तेज था;) –

उत्तर

4
var wrapper = $('.class').clone().attr('id','').empty(); 
  • आप चयनकर्ता अधिक बिल्कुल <a> तत्व आप देख रहे हैं मैच के लिए बदलने के लिए चाहते हो सकता है।
  • clone() मिलान किए गए तत्वों की एक नई प्रति बनाता है, वैकल्पिक रूप से ईवेंट हैंडलर की प्रतिलिपि बनाते हैं।
  • मैंने तत्व की आईडी को साफ़ करने के लिए attr का उपयोग किया ताकि हम आईडी को डुप्लिकेट न करें।
  • empty() सभी बच्चे नोड्स को हटा देता है ('innerHTML')।

    tag = elem.outerHTML.slice(0, elem.outerHTML.indexOf(elem.innerHTML)); 
    

    outerHTML के बाद से खुलने वाला टैगinnerHTML क्या होता है का एक दर्पण के बाद होता है, हम से outerHTML सबस्ट्रिंग कर सकते हैं:

+0

प्यार jquery होना चाहिए। –

+0

कमाल।बहुत बहुत धन्यवाद, जोश :) '.clone()' का उपयोग करने के बारे में कोई चिंता? कुछ कहते हैं कि यह कलाकार नहीं हो सकता है, लेकिन मुझे कोई अन्य समाधान नहीं दिख रहा है। –

+0

मुझे लगता है .clone() पूरी वस्तु को बिल्कुल कॉपी नहीं करता है और कुछ प्रकार का संदर्भ मौजूद है और यदि हम क्लोन ऑब्जेक्ट में .remove() का उपयोग करते हैं, तो यह वास्तव में मूल ऑब्जेक्ट को हटा देता है। मुझे एक बार इस मुद्दे का सामना करना पड़ता है। –

11

भविष्य Googlers के लिए, वहाँ jQuery के बिना यह करने के लिए एक रास्ता है 0 (उद्घाटन टैग की शुरुआत) जहां आंतरिक HTML प्रारंभ होता है (टैग खोलने का अंत), और चूंकि आंतरिक HTML बाहरी HTML का दर्पण है, उद्घाटन टैग को छोड़कर, केवल उद्घाटन टैग ही छोड़ा जाएगा!

यह एक <br> टैग, <meta> टैग, और अन्य खाली टैग के साथ काम करता है:

tag = elem.innerHTML ? elem.outerHTML.slice(0,elem.outerHTML.indexOf(elem.innerHTML)) : elem.outerHTML; 

क्योंकि innerHTML स्वयं बंद होने टैग में खाली होगा, और indexOf('') हमेशा उपस्थिति के लिए 0 देता है, ऊपर संशोधन के चेक innerHTML पहले।

+0

यह रिक्त तत्वों के साथ काम नहीं करता है: document.createElement ("strong")। OuterHTML.slice (0, elem.outerHTML.indexOf (elem.innerHTML)) – Martin

+0

@ मार्टिन ने आपके 'createElement' घोषणा को' elem' और उपरोक्त उपयोग की जाने वाली टर्नरी अभिव्यक्ति का उपयोग करें, यह '' लौटाता है। –

+0

@AaronGillion अच्छी पकड़। '><'यदि आंतरिक HTML एक खाली स्ट्रिंग है तो उसे खोजकर उपचार किया जा सकता है। यह मुझे एक और मुद्दा के बारे में सोचता है, हालांकि: '' अंतरिक्ष के लिए गलत अनुक्रमणिका की पहचान करता है। – MDMower