2008-11-13 17 views
5

मेरे पास एक जावास्क्रिप्ट चर है जिसमें एक HTML पृष्ठ है और सेटअप के कारण मुझे <div id="LiveArea"> और </div> के बीच जावास्क्रिप्ट का उपयोग कर उस चर से निकालने की आवश्यकता है।div टैग के लिए जावास्क्रिप्ट RegEx

किसी भी मदद की बहुत सराहना की जाती है।

उत्तर

1

मुझे यकीन नहीं है कि जब आप कहते हैं, "जावास्क्रिप्ट वेरिएबल जिसमें एक HTML पृष्ठ है", लेकिन यदि आपको ऐसे div के बीच HTML निकालने की आवश्यकता है, तो आप तत्व की आंतरिक HTML प्रॉपर्टी का उपयोग कर सकते हैं।

 

var e = document.getElementById('LiveArea'); 
if(e) alert(e.innerHTML); 

 
+0

धन्यवाद लेकिन यह संभव नहीं है क्योंकि मैं एक चर में वेबपृष्ठ रखता हूं। Div के अंदर भाग प्राप्त करने के लिए –

3

यह करना चाहिए:

pattern = /<div id="LiveArea">(.*?)<\/div>/; 
matches = your_html_var.match(pattern); 
the_string = matches[0]; 

document.write(the_string); 
+0

मिलान होना चाहिए [1]। और वास्तव में, किसी को उम्मीद है कि कोई आंतरिक div नहीं है ... अच्छी तरह से परिभाषित संदर्भ पर काम कर सकता है। – PhiLho

+0

यह काम नहीं करेगा क्योंकि मैच का अंत एक समापन टैग से मेल खाता है जो आपके शुरुआती टैग से संबंधित नहीं है (आवश्यक)। यदि आप अभिव्यक्ति को आलसी बनाते हैं तो यह 'लाइवएरिया' के अंदर एक समापन 'div' पर रोक सकता है; यदि यह लालची है, तो यह आखिरी समापन 'div' पर फिर से बंद हो जाएगा, जो आपके उद्घाटन' div' के अनुरूप नहीं है। इसके अलावा, फिल्हो सही है: 'मैचों [0]' से मिलान किए गए पूरे पैटर्न को पकड़ लिया जाएगा और 'मैचों [1]' आपके कैप्चरिंग समूह को पकड़ेंगे। –

2

यह सिर्फ एक नियमित अभिव्यक्ति जब तक कि div के अंदर एचटीएमएल कोई अन्य divs शामिल साथ संभव नहीं होगा। क्योंकि जेरेमी जैसे पैटर्न के साथ क्या होगा, यह पहला समापन div टैग से मेल खाएगा, जो कि div # LiveArea तत्व के लिए बंद टैग नहीं होगा।

यदि आपके पास स्रोत HTML पर नियंत्रण है, तो आप एक टिप्पणी डाल सकते हैं जिसका उपयोग आप सही "समापन" स्थान के लिए मिलान करने के लिए कर सकते हैं।

अन्य जावास्क्रिप्ट केवल-विकल्प हैं, लेकिन वे एक बहुत kludgy या hacky हैं

  1. सामग्री के इस स्ट्रिंग के बराबर एक छिपा तत्व के innerHTML, तो innerHTML आप mmattax के समाधान का उपयोग करने की आवश्यकता खींच सेट करें। लेकिन आपको ब्राउज़र को इस नए एचटीएमएल का मूल्यांकन करने और इसे डीओएम में बेनकाब करने के लिए समय-समय पर दूसरा कदम करना होगा।
  2. असल में सामग्री को पार्स करें, खोलने/बंद करने वाले divs को ट्रैक करने के ट्रैक को ट्रैक करते हुए आप तब जानेंगे जब आप सही </div> टैग पर हों।
2
var temp = document.createElement('DIV'); 
temp.innerHTML = YourVariable; 
var liveArea; 
for (var i = 0; i < temp.childNodes.length; i++) 
{ 
    if (temp.childNodes[i].id == 'LiveArea') 
    { 
     liveArea = temp.childNodes[i]; 
     break; 
    } 
} 
+0

यह क्यों मतदान किया जा रहा है? यह भी काम नहीं करता है। HTMLElement.getElementById() मानक डोम विधि नहीं है। यदि यह समाधान किसी तृतीय पक्ष लाइब्रेरी पर निर्भर करता है, तो प्रतिक्रिया को इस तरह इंगित करना चाहिए। –

+0

काफी कारण, किसी कारण से मैंने सोचा था कि HTMLElements को उन पर एलिमेंटबॉइड मिल गया था (उन्हें चाहिए), मैंने इसे एक ऐसे तरीके से सही किया है जो काम करेगा। – FlySwat

+0

मैं सहमत हूं, उनके पास यह तरीका होना चाहिए। फिर भी, यह समाधान मानता है कि div # LiveArea वास्तव में एक बच्चा नोड होगा, न कि एक गहरा वंशज, जो मामला w/स्रोत HTML नहीं हो सकता है। –

0

मैं वेब जो एक div id लेते हैं और इसे मुद्रित करने के लिए एक नया पृष्ठ पर यह पता चलता है पर इस article सर्फिंग पाया;

function getPrint(print_area) 
{ 
//Creating new page 
var pp = window.open(); 
//Adding HTML opening tag with <HEAD> … </HEAD> portion 
pp.document.writeln('<HTML><HEAD><title>Print Preview</title>') 
pp.document.writeln('<LINK href=Styles.css type="text/css" rel="stylesheet">') 
pp.document.writeln('<LINK href=PrintStyle.css ' + 
        'type="text/css" rel="stylesheet" media="print">') 
pp.document.writeln('<base target="_self"></HEAD>') 

//Adding Body Tag 
pp.document.writeln('<body MS_POSITIONING="GridLayout" bottomMargin="0"'); 
pp.document.writeln(' leftMargin="0" topMargin="0" rightMargin="0">'); 
//Adding form Tag 
pp.document.writeln('<form method="post">'); 

//Creating two buttons Print and Close within a HTML table 
pp.document.writeln('<TABLE width=100%><TR><TD></TD></TR><TR><TD align=right>'); 
pp.document.writeln('<INPUT ID="PRINT" type="button" value="Print" '); 
pp.document.writeln('onclick="javascript:location.reload(true);window.print();">'); 
pp.document.writeln('<INPUT ID="CLOSE" type="button" ' + 
        'value="Close" onclick="window.close();">'); 
pp.document.writeln('</TD></TR><TR><TD></TD></TR></TABLE>'); 

//Writing print area of the calling page 
pp.document.writeln(document.getElementById(print_area).innerHTML); 
//Ending Tag of </form>, </body> and </HTML> 
pp.document.writeln('</form></body></HTML>'); 

}

आप इस स्क्रिप्ट div id आप प्राप्त करना चाहते हैं भेजने के फोन करेगा;

btnGet.Attributes.Add("Onclick", "getPrint('YOURDIV');") 

यह ठीक वैसे ही काम करता था जैसा मैं चाहता था। उम्मीद है कि यह

0

ऐसा लगता है कि जावास्क्रिप्ट बहुत निराशाजनक नहीं दिखता है, जो इस समस्या को हल करने के लिए इतना आसान बना देगा।

(?<=<div id="LiveArea">).*(?=<\/div>)

यहाँ कुछ लिंक है कि बाहर यद्यपि सहायक हो सकते हैं।

हालांकि, जबकि नेस्टेड टैग के मुद्दे पर चर्चा ...यह हल करने के लिए रेगेक्स की क्षमताओं से परे होगा ताकि जेरेमी का समाधान रेगेक्स के साथ सबसे अच्छा हो। और उन्हें एक पंक्ति पर और क्या होना है ... यह भी मेल नहीं खाएगा कि div की सामग्री अलग-अलग रेखाओं पर है क्योंकि जावास्क्रिप्ट के लिए कोई झंडा नहीं है। मुझे लगता है कि पीटर ने इसका जवाब दिया है।

-2

देर से उत्तर के लिए खेद है, अगर कोई और इस समस्या पर ठोकर खा रहा है तो मेरा सुझाव है, मान लीजिए कि आपके पास उस स्रोत तक पहुंच है जिसे आप स्रोत कोड से पढ़ रहे हैं।

इस

<div id="LiveArea"> 
<!--LiveArea--> 
Content here 
<!--EndLiveArea--> 
</div> 

की तरह एक HTML-टिप्पणी जोड़ें तो

htmlVal.match(/<\!\-\-LiveArea"\-\->(.*?)<\!\-\-EndLiveArea"\-\->/); 
0

के साथ मेल खाते हैं jQuery आप के लिए पार्स करते हैं:

$(page_html).find("#LiveArea").html(); 
7
var html = "<stuff><div id=\"LiveArea\">hello stackoverflow!</div></stuff>"; 

var matches = html.match(/<div\s+id="LiveArea">[\S\s]*?<\/div>/gi); 
var matches = matches[0].replace(/(<\/?[^>]+>)/gi, ''); // Strip HTML tags? 

alert(matches); 
0

निम्नलिखित का प्रयोग करें नियमित अभिव्यक्ति:

<div id="[^"]*">(.*?)</div> 
संबंधित मुद्दे