2008-11-13 5 views
5

У меня есть переменная JavaScript, которая содержит HTML-страницу, и из-за настройки мне нужно извлечь все из <div id="LiveArea"> и </div> из этой переменной с помощью JavaScript.JavaScript RegEx для тегов div

Любая помощь очень ценится.

ответ

1

Я не уверен, что следую за вами, когда вы говорите: «Переменная Javascript, которая содержит html-страницу», но если вам нужно извлечь HTML-код между таким div, вы можете использовать свойство innerHTML элемента.

 

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

 
+0

Спасибо, но это невозможно, так как я держу веб-страницу в переменной. – 2008-11-13 21:09:25

3

Это следует сделать это:

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

document.write(the_string); 
+0

Должны быть совпадения [1], чтобы получить часть внутри div. И действительно, нужно надеяться, что нет внутреннего div ... Возможно, работа над четко определенным контекстом. – PhiLho 2008-11-13 21:54:47

+0

Это не сработает, потому что конец матча может совпадать с закрывающим тегом, который не соответствует (обязательно) соответствует твоему тегу. Если вы сделаете выражение ленивым, оно может остановиться на закрытии `div` внутри` LiveArea`; если он жадный, он остановится при последнем закрытии `div`, опять же, не обязательно тот, который соответствует вашему открытию` div`. Кроме того, PhilLho прав: `matches [0]` будет содержать весь шаблон, а `matches [1]` будет удерживать вашу группу захвата. – 2010-03-20 07:51:47

2

Это будет возможно только с регулярным выражением если HTML, внутри этого DIV не содержит никаких других див. Поскольку то, что будет происходить с таким шаблоном, как Jeremy's, заключается в том, что он будет соответствовать первому закрывающему тегу div, который не обязательно будет закрывающим тегом для элемента div # LiveArea.

Если у вас есть контроль над исходным HTML, вы можете вставить комментарий, который можно использовать для соответствия для правильного «закрывающего» местоположения.

Есть другие Javascript-только вариантов, но каждая из них очень запутаны или Hacky

  1. Установите innerHTML скрытого элемента, равного эту строку содержимого, а затем тянуть innerHTML вам нужно, используя решение mmattax в. Но вам, вероятно, придется выполнить второй шаг здесь с тайм-аутом, чтобы дать браузеру время для оценки этого нового HTML и разоблачить его в DOM.
  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

Я нашел article серфинг в Интернете, которые принимают в DIV идентификатор и показывает его на новой странице, чтобы распечатать его;

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 идентификатор, который вы хотите получить;

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

Он работал точно так, как я хотел. Надеюсь, это поможет

0

кажется, что javascript не поддерживает lookbehind, который очень разочаровывает, что сделало бы эту проблему намного проще решить.

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

здесь некоторые ссылки, которые могут помочь из Тхо.

хотя при обсуждении вопроса о вложенных тегов ...это будет за пределами возможностей regex для решения, поэтому решение jeremy - лучшее, что вы можете сделать с регулярным выражением. и более того, они должны быть в одной строке ... он даже не будет соответствовать, если содержимое div находится на отдельных строках, потому что для javascript нет флага 's'. Думаю, Питер ответил на этот вопрос.

-2

Извините за поздний ответ, если кто-то другой наткнулся на эту проблему, вот мое предложение, предполагая, что у вас есть доступ к странице, которую вы читаете из исходного кода.

Добавить HTML-комментарий как этот

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

сопоставьте его с

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> 
Смежные вопросы