2009-10-26 23 views
58

Có ai biết cách chọn các nút nhận xét HTML với jQuery không?Chọn nhận xét HTML với jQuery

<html> 
<head> 
    <title>Check Test</title> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 
    <script type="text/javascript"> 
     $(function() { 
      $("body *").each(function() { 
       alert($(this).wrap("<span />").parent().html()); 
      }); 
     }); 
    </script> 
</head> 
<body> 
    <!-- Hello --> 
    <p> 
     <label for="thing">Thing Label</label> 
     <input id="thing" type="checkbox" /> 
    </p> 

này không nhận bình luận.

+0

Tôi nghĩ câu trả lời bạn đánh dấu là không tốt nhất. Đó là một ý tưởng tốt để đánh dấu câu trả lời thứ hai có nhiều phiếu bầu hơn. – Mohammad

Trả lời

11

jQuery comments() plugin sẽ làm điều đó cho bạn. Cách sử dụng:

var comments = $("#foo").comments(); 
alert(comments.html()); 
+0

Tôi thực sự cần để có thể chọn các nhận xét giống như bất kỳ phần tử nào khác, nhưng đó là một khởi đầu tốt, cảm ơn bạn –

11

Và nếu bạn không muốn có một plugin:

var content = jQuery('body').html(); 
alert(content.match(/<!--.*?-->/g)); 

này sử dụng biểu thức thông thường. Nó được thiết lập để tìm kiếm bất cứ điều gì kèm theo <!----> trong khi nó không quan trọng những gì được viết bên trong.

LƯU Ý: Tôi không chắc chắn tuy nhiên, nếu jQuery cũng trả về nhận xét. Nếu không, cách tiếp cận này không hoạt động.

+2

Nó trả lại nhận xét, vì vậy các tác phẩm trên, nhờ đề xuất –

+1

Thực sự tìm kiếm lại, đây là không thực sự sử dụng jquery để làm bất cứ điều gì hữu ích tức là document.body.innerHTML == jQuery ('body') html(), và có nhiều hơn regex hơn đề xuất ở đây ... suy nghĩ lại, nhờ anyway Mike –

+1

Cụm từ thông dụng được đánh giá cao bởi bên này. – 2rs2ts

104

Điều này dường như làm điều gì đó tương đương với bạn đang tìm kiếm những gì:

$(function() { 
     $("body").contents().filter(function(){ 
      return this.nodeType == 8; 
     }).each(function(i, e){ 
      alert(e.nodeValue); 
     }); 
    }); 
+7

+1 để sử dụng các thuộc tính DOM gốc. –

+26

Cái gì đó không phải lúc nào cũng hoạt động, cái này có: '$ (" * "). Contents(). Filter (function() {return this.nodeType == 8;})' –

+0

Xem http://jsfiddle.net/ zM5se/1/cho mã hoạt động. –

6

Một lần nữa, tôi đến trễ trong các trò chơi, nhưng tôi nghĩ rằng tôi muốn đóng góp trở lại như tôi tìm thấy bài này hữu ích trong một tình huống gần đây tôi gặp phải.

Trong ngữ cảnh của chúng tôi, chúng tôi có một dịch vụ quảng cáo phân phối các khối mã để hiển thị quảng cáo.

Mỗi quảng cáo có 'id chuyến bay' duy nhất. Có nghĩa là cùng một quảng cáo đường sắt bên 250x300 có thể có nhiều chuyến bay. Vì vậy, trong một lần hiển thị, bạn có thể thấy quảng cáo cho Subway, làm mới và có lẽ là Quizno.

Thật không may, dịch vụ cung cấp ID chuyến bay này trong nhận xét và không phải là thứ hữu ích hơn một chút như thuộc tính dữ liệu. Điều đó nói rằng, mỗi nhận xét nằm trong một thẻ.

Từ trên, tôi đã có thể cùng nhau đưa giải pháp này để có được những số hiệu chuyến bay trong các bình luận thúc đẩy phương pháp exec() JavaScript của đối tượng RegExp:

regexComment = new RegExp(/<!--\s*ad flight id:\s*([0-9]+)\s*-->/i); 
targetElement = regexComment.exec($('div.advertisement').html()); 
if(targetElement.length > 0) { 
    return parseInt(targetElement[1]); 
} 

Một lần nữa, xin lỗi cho cuối trong game , nhưng tôi nghĩ rằng nó sẽ không gây tổn thương để cung cấp một cách tiếp cận khác cho vấn đề này.

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