2012-03-05 36 views
5

Tôi có một ứng dụng web trang đơn sử dụng jquery và một bộ mẫu được nhúng. Một mẫu có thể chứa thẻ như dưới đây:Jquery; chọn đúng nội dung của thẻ tập lệnh

<script type="html/template" id="sample"> 

<script type="text/javascript" charset="utf-8">alert('x');</script> 


</script> 

và mã jquery để retrive mẫu là

$("#sample").html(); 

Kết quả của lệnh jquery trên là

<script type="text/javascript" charset="utf-8">alert('x'); 

Thay vì

<script type="text/javascript" charset="utf-8">alert('x');</script> 

Làm cách nào tôi có thể sửa lỗi này đầu ra?

+0

Nếu bạn xem code của bạn trong trình duyệt, nó sẽ loại bỏ các thẻ script đóng nhúng. –

+0

bạn có thể nối thêm "" vào cuối lưu ý rằng điều này xảy ra vì trình duyệt không hỗ trợ loại tập lệnh này –

Trả lời

1

Tất cả mọi thứ bên trong một <script> dự kiến ​​sẽ được kịch bản, chứ không phải HTML.

Trình duyệt thấy:

<script type="html/template" id="sample">

và bắt đầu giải thích tất cả mọi thứ mà sau đó xuất hiện như kịch bản, khi nó đạt đến nội <script của nó xem như chỉ là văn bản.

Trường hợp ngoại lệ cho điều này là </script> mà trình duyệt đang tìm kiếm để chuyển bối cảnh từ kịch bản sang HTML, vì vậy khi nó thấy 1 </script> trong:

<script type="text/javascript" charset="utf-8">alert('x');</script>

Nó giả định khối mở kịch bản hoàn thành & chuyển về HTML mong đợi, thiết lập chính xác nội dung của nút tập lệnh bên ngoài thành:

<script type="text/javascript" charset="utf-8">alert('x');

Bạn có thể thực hiện những gì bạn đang cố gắng thực hiện trên máy chủ và phân tích cú pháp ở đó hoặc sử dụng cách tiếp cận khác để tạo khuôn mẫu.

0

Đó là vì trình duyệt không hỗ trợ html/template mime-type và không biết cách làm việc với nó. Bạn có thể sửa chữa nó chỉ bằng cách thoát chuỗi bên trong script-tag.

2

Tôi không chắc chắn điều này sẽ giúp bạn.

var a = $("#sample").html() +'</'+'script>'; 

alert(a);​ 

fiddle liên kết: http://jsfiddle.net/Sg5W8/

0

gì về

var c = $("#sample script").html(); 
var type = $("#sample script").attr("type"); 
var chset = $("#sample script").attr("utf-8"); 

var ouptut = '<script type="'+ type +'" charset="'+ charset +'">' + c + '</script>' 
1

Thẻ Nested script không được phép trong HTML và nếu bạn chạy tập lệnh lồng nhau thông qua validator bạn sẽ gặp lỗi Stray end tag script.

Bạn cần phải thoát khỏi thẻ tập lệnh hoặc sử dụng phần tử khác làm phần tử giữ cho cú pháp mẫu.

0

Tôi sẽ đề xuất nếu có thể di chuyển tập lệnh ra. Tôi đã thử 2 lựa chọn. Đầu tiên là với mã hóa html và thứ hai là phần tử kịch bản tùy chỉnh.

1. html mã hóa

http://jsfiddle.net/Ae48z/

<script type="html/template" id="sample"> 

    &lt;script type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;alert(&#39;x&#39;); &lt;/script&gt; 

js

var out = $("#sample").html(this); 
    console.log(out); 

2.script thay

http://jsfiddle.net/2G7gj/

<script type="html/template" id="sample"> 
    <xscript type="text/javascript" charset="utf-8">alert('x');</xscript> 

</script> 

var out = $('#sample').html().replace(/xscript/g,'script'); 
console.log(out) 

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