2011-10-25 46 views
22

có thể sử dụng hàm jquery text() để xóa tất cả HTML trong một chuỗi không?Xóa tất cả các thẻ HTML trong một chuỗi (với hàm jquery text())

String với thẻ HTML:
myContent = '<div id="test">Hello <span>world!</span></div>';


Kết quả phải:
Hello world!

+1

thể trùng lặp của [Strip HTML từ văn bản JavaScript] (http://stackoverflow.com/questions/822452/strip-html-from-text-javascript) – Clive

Trả lời

67
var myContent = '<div id="test">Hello <span>world!</span></div>'; 

alert($(myContent).text()); 

Điều đó dẫn tới hello world. Câu trả lời đó có đáp ứng được câu hỏi của bạn không?

http://jsfiddle.net/D2tEf/ cho một ví dụ

+0

Hoặc để đặt này một cách khác, đối với bất kỳ chuỗi giá trị của x, $ ('' + x + '') .text() == x luôn luôn đánh giá là đúng. – Jazz

+0

Thực ra nó không đúng, nếu chuỗi chứa html. – HarryFink

+0

Vẫn hoạt động. giải pháp đơn giản –

7

Có thể bạn không chỉ try it?

myContent = '<div id="test">Hello <span>world!</span></div>'; 
console.log($(myContent).text()); //Prints "Hello world!" 

Lưu ý rằng bạn cần bọc chuỗi trong đối tượng jQuery, nếu không nó sẽ không có phương thức text rõ ràng.

20

Tôi đã tạo trường hợp thử nghiệm này: http://jsfiddle.net/ccQnK/1/, tôi đã sử dụng chức năng thay thế Javascript bằng cụm từ thông dụng để nhận kết quả bạn muốn.

$(document).ready(function() { 
    var myContent = '<div id="test">Hello <span>world!</span></div>'; 
    alert(myContent.replace(/(<([^>]+)>)/ig,"")); 
}); 
+2

Bạn nên luôn luôn đăng giải pháp thực tế ở đây, không chỉ trong jsfiddle hoặc một số trang web tương tự. Không có gì đảm bảo rằng trang web khác sẽ tồn tại trong tương lai. – Blazemonger

+0

từ jsfiddle myContent.replace (/ (<([^>] +)>)/ig, "") – sherif

+0

Không phải là một fan hâm mộ lớn của các giải pháp regex. Chúng hầu như luôn bị phá vỡ. –

9

Nếu bạn cần phải loại bỏ mã HTML nhưng không biết nếu nó thực sự có chứa bất kỳ thẻ HTML, bạn không thể sử dụng phương pháp jQuery trực tiếp vì nó trả wrapper trống cho văn bản không phải là HTML.

$('<div>Hello world</div>').text(); //returns "Hello world" 
$('Hello world').text(); //returns empty string "" 

Bạn có thể phải quấn văn bản trong HTML hợp lệ:

$('<div>' + 'Hello world' + '</div>').text(); 

Hoặc phương pháp sử dụng $ .parseHTML() (kể từ jQuery 1.8) có thể xử lý cả HTML và không phải là HTML text:

var html = $.parseHTML('Hello world'); //parseHTML return HTMLCollection 
var text = $(html).text(); //use $() to get .text() method 

Thêm phân tích cú phápHTML xóa hoàn toàn thẻ tập lệnh hữu ích như bảo vệ chống hack cho đầu vào của người dùng.

$('<p>Hello world</p><script>console.log(document.cookie)</script>').text(); 
//returns "Hello worldconsole.log(document.cookie)" 

$($.parseHTML('<p>Hello world</p><script>console.log(document.cookie)</script>')).text(); 
//returns "Hello world" 
3

Một thay thế:

$("<p>").html(myContent).text(); 
0

tôi tìm thấy trong trường hợp cụ thể của tôi mà tôi chỉ cần để cắt nội dung. Có lẽ không phải câu trả lời được hỏi trong câu hỏi. Nhưng tôi nghĩ tôi nên thêm câu trả lời này.

$(myContent).text().trim() 
Các vấn đề liên quan