2010-03-02 33 views
14

chỉ cần tự hỏi nếu có một cách để loại bỏ một bình luận html bằng cách sử dụng jquery.là nó có thể loại bỏ một bình luận html từ dom bằng cách sử dụng jquery

<!-- <div id="main">Some text </div> --> 

nhờ

+1

Mặc dù nó có thể được gỡ bỏ từ DOM, như xa như tôi có thể tìm thấy bạn không thể giấu nó từ những người sử dụng "xem nguồn" tùy chọn menu trong trình duyệt của họ . Bạn thực sự nên làm điều này bằng cách sử dụng kịch bản phía máy chủ. – ghoppe

Trả lời

-5

Tôi gần như bình luận nào đó không thực sự là một phần của DOM. Chúng là một phần của mã HTML gốc, nhưng khi các trình duyệt chuyển đổi nó thành DOM, chúng sẽ bị tước đi khi chúng không phục vụ mục đích hiển thị.

+5

Điều đó không đúng. – user113716

+4

Nhận xét là các nút DOM. – bfontaine

1

Không phải là tôi biết. Nhưng tôi không hiểu việc sử dụng nó sẽ là gì. Nhận xét sẽ chỉ được nhìn thấy nếu bạn xem nguồn trang và hầu hết các trình duyệt (nếu không phải tất cả) có tùy chọn nguồn xem sẽ mặc định cung cấp cho bạn nguồn trước khi tải javascript.

+0

Có thể. – user113716

+0

@ user113716, bạn đang bỏ lỡ toàn bộ điểm mà Jasper đang tạo ra. Các nhận xét chỉ được xóa khi xem trang trực tiếp thông qua trình kiểm tra DOM. Nếu ai đó nhấp chuột phải vào trang và chọn "Xem nguồn", họ sẽ thấy các nhận xét, vì 'javascript' không chạy khi xem nguồn. Vì vậy, nếu bạn đang suy nghĩ về việc sử dụng phương pháp trên để ẩn thông tin nhạy cảm, hãy suy nghĩ lại. –

37

Hãy thử điều này:

$('*').contents().each(function() { 
    if(this.nodeType === Node.COMMENT_NODE) { 
     $(this).remove(); 
    } 
}); 

EDIT: này loại bỏ các yếu tố từ DOM. Các trình duyệt thường lưu trữ bản sao của nguồn trang gốc có thể truy cập được thông qua một mục menu. Điều này không được cập nhật.

Nếu bạn muốn ẩn nhận xét của mình, bạn luôn có thể chèn toàn bộ đánh dấu HTML (có nhận xét) vào DOM bằng javascript. Javascript có thể, tất nhiên, được xem, nhưng nó là một bước gỡ bỏ từ nơi đầu tiên mọi người sẽ xem xét.

+2

Điều đó có hiệu quả không? Tôi đã cố gắng như nhau nhưng không thể nhận được bất kỳ kết quả trên FF 3.6 ... – Sinan

+0

@ Sinan - Làm việc cho tôi trong Firefox 3.5.8 cho Mac. Tôi đã cập nhật mã từ phiên bản gốc của mình để sử dụng '*' thay vì 'body', vì nó không nhận được các chú thích được nhúng bên trong con cháu của' body'. – user113716

+0

@Sinan - Vâng, tôi đoán nó sẽ phụ thuộc vào cách bạn đang xem nguồn. Sử dụng Firebug, chúng đang bị xóa, nhưng nguồn được truy xuất bằng cách sử dụng mục menu 'Nguồn Trang' không bao giờ được cập nhật. Nó luôn ở trạng thái ban đầu của nó. – user113716

1

Đây có thể là một cách hơi khó hiểu, nhưng nó đã làm việc tuyệt đối đối với tôi.

Nó sử dụng hàm split().

Thứ nhất

codeWithComments = $("*yourelementhere*").html(); 
var withoutComments = codeWithComments.split('-->'); 
$("*yourelementhere*").html(withoutComments[withoutComments.length-1]); 

này sẽ thay thế HTML của phần tử được với mã trực tiếp sau khi người cuối cùng '->' này dĩ nhiên giả định rằng bạn chỉ có một tập hợp các ý kiến ​​trong các yếu tố nhất định. Bạn có thể chia nhỏ trên dòng cuối cùng của nhận xét để nhận được kết quả khớp chính xác.

Làm việc cho tôi, có thể không hoạt động trong mọi trường hợp.

+0

Giải quyết một vấn đề lớn đối với tôi, cảm ơn bạn đời. :) – Miru

0

Tôi gặp phải lỗi khi tập lệnh cố truy cập nội dung IFrame. Đây là một phiên bản sửa đổi được bỏ qua IFrame:

$('*') 
.filter((idx, el) => !(el instanceof HTMLIFrameElement)) 
.contents() 
.each(() => { 
    try { 
     if(this.nodeType === Node.COMMENT_NODE) { 
      $(this).remove(); 
     } 
    } catch (e) { 
     console.error(e); 
    } 
}); 
Các vấn đề liên quan