JavaScript RegEx для тегов div
10 ответов
7 SoSo [2011-03-19 11:01:00]
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);
3 Jeremy Ruten [2008-11-14 00:11:00]
Это должно сделать это:
pattern = /<div id="LiveArea">(.*?)<\/div>/;
matches = your_html_var.match(pattern);
the_string = matches[0];
document.write(the_string);
2 FlySwat [2008-11-14 00:23:00]
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;
}
}
2 Peter Bailey [2008-11-14 00:17:00]
Это будет невозможно с помощью обычного выражения, если только HTML внутри этого div не содержит других div. Поскольку то, что будет происходить с таким шаблоном, как Jeremy, заключается в том, что он будет соответствовать первому закрывающему тегу div, который не обязательно будет закрывающим тегом для элемента div # LiveArea.
Если у вас есть контроль над исходным HTML, вы можете вставить комментарий, который вы можете использовать для соответствия для правильного "закрывающего" местоположения.
Существуют и другие параметры только для javascript, но каждый из них очень неуклюжий или взломанный
- Установите innerHTML скрытого элемента, равного этой строке содержимого, THEN вытащите innerHTML, вам нужно использовать решение mmattax. Но вам, вероятно, придется выполнить второй шаг здесь с тайм-аутом, чтобы дать браузеру время оценить этот новый HTML-код и выставить его в DOM.
- Соберите содержимое, отслеживая открытия/закрытия divs, когда вы сталкиваетесь с ними, чтобы затем узнать, когда вы находитесь в правильном теге
</div>
.
1 mmattax [2008-11-14 00:04:00]
Я не уверен, что следую за вами, когда вы говорите: "Переменная Javascript, которая содержит html-страницу", но если вам нужно извлечь HTML-код из такого div, вы можете использовать свойство element innerHTML.
var e = document.getElementById('LiveArea');
if(e) alert(e.innerHTML);
0 Victor [2009-07-09 23:56:00]
кажется, что javascript не поддерживает lookbehinds, который очень разочаровывает, что сделало бы эту проблему намного легче решить.
(?<=<div id="LiveArea">).*(?=<\/div>)
Вот некоторые ссылки, которые могут помочь вам.
хотя при обсуждении проблемы с вложенными тегами... это будет за пределами возможностей регулярного выражения, чтобы решить такое jeremy решение, это лучшее, что вы можете сделать с регулярным выражением. и более того, они должны быть в одной строке... он даже не будет соответствовать, если содержимое div находится на отдельных строках, потому что для javascript нет флага 's'. Я думаю, что Питер дал ответ на этот вопрос.
0 Supriya Gopalakrishnan [2014-12-02 15:31:00]
Используйте следующее регулярное выражение:
<div id="[^"]*">(.*?)</div>
0 Nelson Miranda [2008-11-14 01:15:00]
Я нашел эту статью статью в Интернете, которая принимает идентификатор 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>');
}
Вы назовёте это script отправкой идентификатора DIV, который вы хотите получить;
btnGet.Attributes.Add("Onclick", "getPrint('YOURDIV');")
Он работал точно так, как я хотел. Надеюсь, что это поможет.
0 Magnar [2010-03-20 10:33:00]
Пусть jQuery выполняет синтаксический анализ для вас:
$(page_html).find("#LiveArea").html();
-2 Jonas [2010-03-20 10:28:00]
Извините за поздний ответ, если кто-то другой наткнулся на эту проблему, вот мое предложение, предполагая, что у вас есть доступ к странице, которую вы читаете из исходного кода.
Добавьте HTML-комментарий, подобный этому
<div id="LiveArea">
<!--LiveArea-->
Content here
<!--EndLiveArea-->
</div>
Затем сопоставьте его с
htmlVal.match(/<\!\-\-LiveArea"\-\->(.*?)<\!\-\-EndLiveArea"\-\->/);