2009-03-06 47 views
15
<noscript><div id="example">I want to get this innerHTML</div></noscript> 

<script type="text/javascript"> alert($('example').innerHTML);</script> 

Đoạn mã javascript này chỉ trả về một chuỗi rỗng. Có cách nào để lấy nội dung của nút noscript không?Nội dung truy cập của <noscript> với Javascript

p.s. Tôi đang sử dụng nguyên mẫu cho dự án cụ thể này.

+1

Hãy thử $ ($ ("noscript"). Text()) với jQuery. – sibidiba

+0

Điều này^không hoạt động. Ít nhất trong Chrome 32. – Jazzy

Trả lời

12

Nếu tập lệnh được bật, the noscript element is defined as containing only text - mặc dù văn bản phải là có thể phân tích cú pháp văn bản, với một số hạn chế về nội dung. Với ý nghĩ đó, bạn sẽ có thể trích xuất văn bản, phân tích cú pháp và sau đó tìm phần tử bạn muốn. Một ví dụ thô sơ về điều này sau:

var nos = document.getElementsByTagName("noscript")[0]; 
// in some browsers, contents of noscript hang around in one form or another 
var nosHtml = nos.textContent||nos.innerHTML; 

if (nosHtml) 
{ 
    var temp = document.createElement("div"); 
    temp.innerHTML = nosHtml; 

    // lazy man's query library: add it, find it, remove it 
    document.body.appendChild(temp); 
    var ex = document.getElementById("example"); 
    document.body.removeChild(temp); 

    alert(ex.innerHTML); 
} 

Lưu ý rằng khi tôi viết câu trả lời này lần đầu, thất bại trên trong Google Chrome; truy cập vào nội dung noscript dường như được hỗ trợ tốt hơn một chút trong những ngày này, nhưng nó vẫn tấn công tôi như một trường hợp có lẽ có nhiều khả năng hơn các phần tử khác để hiển thị lỗi - tôi sẽ tránh nó nếu bạn có các tùy chọn khác.

+0

Điều này dường như không hoạt động trên IE7 (XP). Tôi làm việc trên IE6, mặc dù. – pixelastic

+1

Hãy thử $ ($ ("noscript"). Text()) với jQuery. – sibidiba

+0

@ Shog9 Tất cả thời gian sau, bạn có thể làm rõ điều gì đó về câu trả lời này không? 'trong Chrome của Google, phần tử noscript không có con trong DOM' - nếu tôi hiểu chính xác điều này, bạn có đang nói phiên bản Chrome bạn đã thử nghiệm tại thời điểm hoàn toàn làm trống nội dung của thẻ' noscript' khi Javascript được bật hay không, do đó làm cho nội dung bên trong của nó trống rỗng? Nếu đúng, có vẻ như một chút lẻ.Tôi đang cố gắng để thực hiện một cái gì đó tương tự như ngày hôm nay, nhưng điều này đã cho tôi tự hỏi nếu đặc tả 'noscript' không phức tạp về những gì để làm với nội dung của nó. –

3

Thử nghiệm với Firefox 3.0.7, Safari 3.2.2 và MSIE 7.0.5730.13 (tất cả trên WinXP SP3) có vẻ như mọi thứ trong các thẻ <noscript> bị bỏ qua hoàn toàn khỏi cây DOM.

Có thể tự truy cập vào phần tử <noscript> và sau đó sử dụng các phương pháp DOM để thay đổi các phần tử con của nó.

+0

Không thử hai loại kia, nhưng FF3.0.7 cho thấy nội dung thông qua textContent. – Shog9

3

Từ HTML 4.0 spec:

Yếu tố NOSCRIPT cho phép tác giả để cung cấp nội dung thay thế khi một kịch bản không được thực thi. Nội dung của phần tử NOSCRIPT chỉ được hiển thị bởi tác nhân người dùng nhận biết tập lệnh trong các trường hợp sau:

  • Tác nhân người dùng được định cấu hình không đánh giá tập lệnh.
  • Tác nhân người dùng không hỗ trợ ngôn ngữ kịch bản được gọi bởi phần tử SCRIPT trước đó trong tài liệu.

Dường như với tôi rằng điều này có nghĩa là toàn bộ nội dung của thẻ NOSCRIPT (trong trường hợp này, div của bạn) sẽ được bỏ qua hoàn toàn nếu kịch bản được kích hoạt trong trình duyệt. Bạn đã xác minh rằng div "example" có thể truy cập được thông qua DOM trong trường hợp của bạn không?

+0

Tôi đã thực sự thử nghiệm nó (xem câu trả lời của tôi) - div không có trong DOM. – Alnitak

3

Tôi không chắc chắn về nguyên mẫu, nhưng hoạt động này trong Chrome với jQuery: (. $ ("Noscript") text())

$('noscript').before($('noscript').text()); 
+1

Tôi đã sử dụng thành công với IE9, FF9 và Chrome 16.0.912.77. Phải sử dụng công việc chung cho IE8 (và có thể sớm hơn), trong trường hợp của tôi, để truy xuất nội dung tại URL hiện tại qua AJAX để chèn vào tab Giao diện người dùng jQuery vì nội dung được gắn thẻ thực tế từ url không phải gốc được phân phát trong một thẻ noscript theo mặc định cho một yêu cầu đầy đủ, chỉ có nội dung tab trên một yêu cầu AJAX. – tvanfosson

2

Hãy thử $ với jQuery.

+0

Thật thú vị và hữu ích khi truy xuất văn bản thuần túy. nhưng Sizzle (1.9.1) ném một lỗi "biểu thức không được công nhận" nếu bạn cố gắng lấy lại bất kỳ đánh dấu nào với các thẻ. – Ben

Các vấn đề liên quan