2008-11-13 49 views
5

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"></div> từ biến đó bằng JavaScript.JavaScript RegEx cho thẻ div

Bất kỳ trợ giúp nào được đánh giá cao.

Trả lời

1

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); 

 
+0

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. –

3

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); 
+0

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

+0

Đ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. –

2

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

  1. Đặt innerHTML của một yếu tố tiềm ẩn bằng chuỗi nội dung này, sau đó kéo innerHTML bạn không cần sử dụng giải pháp mmattax của. Nhưng có thể bạn sẽ phải thực hiện bước thứ 2 ở đây với thời gian chờ để cung cấp cho trình duyệt thời gian để đánh giá HTML mới này và hiển thị nó cho DOM.
  2. Thực sự phân tích cú pháp nội dung, theo dõi mở/đóng div khi bạn gặp chúng, do đó bạn sẽ biết khi nào bạn đang ở đúng thẻ </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

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. –

+0

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

+0

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. –

0

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

0

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.

-2

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"\-\->/); 
0

Hãy jQuery làm phân tích cú pháp cho bạn:

$(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

Sử dụng sau đây cụm từ thông dụng:

<div id="[^"]*">(.*?)</div>