Tôi có biến JavaScript chứa trang HTML và do thiết lập tôi cần trích xuất mọi thứ giữa <div id="LiveArea">
và </div>
từ biến đó bằng JavaScript.JavaScript RegEx cho thẻ div
Bất kỳ trợ giúp nào được đánh giá cao.
Tôi có biến JavaScript chứa trang HTML và do thiết lập tôi cần trích xuất mọi thứ giữa <div id="LiveArea">
và </div>
từ biến đó bằng JavaScript.JavaScript RegEx cho thẻ div
Bất kỳ trợ giúp nào được đánh giá cao.
Tôi không chắc chắn tôi sẽ theo bạn khi bạn nói "Biến Javascript chứa một trang html", nhưng nếu bạn cần trích xuất HTML giữa một div như vậy, bạn có thể sử dụng thuộc tính innerHTML của phần tử.
var e = document.getElementById('LiveArea');
if(e) alert(e.innerHTML);
này nên làm điều đó:
pattern = /<div id="LiveArea">(.*?)<\/div>/;
matches = your_html_var.match(pattern);
the_string = matches[0];
document.write(the_string);
Phải khớp với [1] để lấy phần bên trong div. Và thực sự, người ta phải hy vọng không có div nội bộ ... Có thể làm việc trên bối cảnh được xác định rõ ràng. – PhiLho
Điều đó sẽ không hiệu quả vì kết thúc trận đấu có thể khớp với thẻ đóng mà không nhất thiết phải tương ứng với thẻ mở của bạn. Nếu bạn làm cho biểu thức lười biếng nó có thể dừng lại khi đóng 'div' bên trong' LiveArea'; nếu nó tham lam, nó sẽ dừng lại ở lần cuối 'div', một lần nữa, không nhất thiết là cái tương ứng với phần mở đầu của bạn' div'. Ngoài ra, PhilLho là đúng: 'các kết quả phù hợp [0]' sẽ giữ toàn bộ mẫu phù hợp và 'kết quả phù hợp [1]' sẽ giữ nhóm chụp của bạn. –
này sẽ không thể thực hiện chỉ với một biểu thức chính quy trừ HTML bên trong div mà không chứa các div khác. Bởi vì những gì sẽ xảy ra với một mẫu như Jeremy là nó sẽ khớp với thẻ div đóng đầu tiên, mà không nhất thiết phải là thẻ đóng cho phần tử div # LiveArea.
Nếu bạn có quyền kiểm soát HTML nguồn, bạn có thể chèn nhận xét mà bạn có thể sử dụng để khớp với vị trí "đóng" chính xác.
Có khác javascript chỉ lựa chọn, nhưng họ từng rất kludgy hoặc hacky
</div>
.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;
}
}
Tại sao điều này được bỏ phiếu? Nó thậm chí không hoạt động. HTMLElement.getElementById() không phải là một phương thức DOM chuẩn. Nếu giải pháp này dựa trên thư viện của bên thứ ba thì câu trả lời phải biểu thị như vậy. –
Khá đúng, vì một số lý do tôi nghĩ rằng HTMLElements đã getElementById trên chúng (Họ nên), tôi đã sửa nó thành một cách sẽ hoạt động. – FlySwat
Tôi đồng ý, họ nên có phương pháp đó. Tuy nhiên, giải pháp này giả định rằng div # LiveArea sẽ thực sự là một nút con, và không phải là hậu duệ sâu hơn, có thể không phải là trường hợp w/HTML nguồn. –
tôi thấy article lướt này trên web mà mất một id DIV và cho thấy nó trên một trang mới để in nó;
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>');
}
Bạn sẽ gọi cho kịch bản này gửi id DIV bạn muốn nhận được;
btnGet.Attributes.Add("Onclick", "getPrint('YOURDIV');")
Nó hoạt động chính xác như tôi muốn. Hy vọng nó sẽ giúp
có vẻ như javascript không hỗ trợ lookbehinds mà rất disapointing, mà sẽ làm cho vấn đề này dễ dàng hơn nhiều để giải quyết.
(?<=<div id="LiveArea">).*(?=<\/div>)
đây là một số liên kết có thể giúp đỡ tho.
mặc dù trong khi thảo luận về vấn đề thẻ lồng nhau ...mà sẽ vượt quá khả năng của regex để giải quyết giải pháp của jeremy là tốt nhất bạn có thể làm với regex. và những gì là nhiều hơn họ có được trên một dòng duy nhất ... nó thậm chí sẽ không phù hợp nếu các nội dung của div là trên dòng riêng biệt bởi vì không có 's' cờ cho javascript. Tôi nghĩ peter đã đưa ra câu trả lời cho câu hỏi này.
Xin lỗi vì trả lời muộn, nếu có người khác tình cờ gặp vấn đề này ở đây là gợi ý của tôi, giả sử bạn có quyền truy cập vào trang bạn đang đọc từ mã nguồn.
Thêm một HTML-bình luận như thế này
<div id="LiveArea">
<!--LiveArea-->
Content here
<!--EndLiveArea-->
</div>
Sau đó kết hợp nó với
htmlVal.match(/<\!\-\-LiveArea"\-\->(.*?)<\!\-\-EndLiveArea"\-\->/);
Hãy jQuery làm phân tích cú pháp cho bạn:
$(page_html).find("#LiveArea").html();
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);
Sử dụng sau đây cụm từ thông dụng:
<div id="[^"]*">(.*?)</div>
Cảm ơn bạn nhưng không thể thực hiện được vì tôi giữ trang web trong một biến. –