2011-12-14 33 views

Trả lời

12

này nên làm việc cho bạn:

var stringOfHtml = // your string here 
$(stringOfHtml).find('script').remove(); 

Để có được chuỗi mới với các thẻ script loại bỏ:

var stringOfHtml = "<div><script></script><span></span></div>"; 
var html = $(stringOfHtml); 
html.find('script').remove(); 

var stringWithoutScripts = html.wrap("<div>").parent().html(); // have to wrap for html to get the outer element 

JS Fiddle Example - Đã sử dụng p thay vì kịch bản như kịch bản đã phá vỡ fiddle , cùng một nguyên tắc.

câu trả lời làm việc thực tế ở đây (hy vọng)

Đây là một cách giải quyết cho vấn đề kịch bản, sử dụng thay thế để trao đổi các văn bản kịch bản với cái gì khác (thử và làm cho nó duy nhất) sau đó loại bỏ những thẻ mới và sử dụng thay thế một lần nữa để hoán đổi lại trong trường hợp kịch bản được sử dụng bất cứ nơi nào khác trong văn bản. Vâng, nó sử dụng regex, nhưng không phải để loại bỏ các thẻ script vì vậy tôi hy vọng rằng sẽ ổn thôi;):

var stringOfHtml = "<p></p><script>alert('fail');</scr" + "ipt><span></span>"; 
var wrappedString = '<div>' + stringOfHtml + '</div>'; 
var noScript = wrappedString.replace(/script/g, "THISISNOTASCRIPTREALLY"); 
var html = $(noScript); 
html.find('THISISNOTASCRIPTREALLY').remove(); 

alert(html.html().replace(/THISISNOTASCRIPTREALLY/g, 'script')); 

JS Fiddle Workaround

JS Fiddle Example With Script Text

+0

Làm thế nào để bạn nhận được chuỗi kết quả? – nnnnnn

+0

Tôi đoán rằng vấn đề SO là kịch bản được thực hiện trên phân tích cú pháp nó, và '.remove()' là unuseful. [Xem ví dụ này] (http://jsfiddle.net/tWenG/1/). –

+0

@DavidRodrigues Có vẻ như bạn đã đúng. Đoán điều này không thể hoạt động trên các tập lệnh nhưng phải hoạt động trên bất kỳ thẻ nào khác. –

2

tôi đoán này nên làm việc

$('script').each(function() { 
    $(this).remove(); 
}); 
+0

điều này tương đương với '$ ('script'). Remove()' –

5

Câu hỏi cũ, nhưng nếu bạn vẫn đang tìm kiếm cách dễ nhất để xóa tập lệnh khỏi chuỗi hãy thử

$.parseHTML(string); 

$ .parseHTML() tự động xóa thẻ tập lệnh khỏi chuỗi.

Edit:

này hoạt động vì keepScripts có giá trị sai như mặc định. (Tham khảo: $.parseHtml)

$.parseHTML(data, context, keepScripts) 
+0

Hoạt động tốt, nhưng làm cách nào để tham gia html trở lại thành chuỗi? 'parseHTML()' trả về một mảng các phần tử DOM loại trừ các thẻ script, nhưng tôi muốn tham gia mà không cần phải chèn chúng lại vào tài liệu. Tôi đang cố gắng tránh sử dụng một cái gì đó như $(). Add() hoặc append() – ojosilva

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