Chọn tất cả text node bằng jQuery như thế nào

0 k thích
Mình muốn chọn tất cả các text node con bên trong một element bằng jQuery thì làm như thế nào
avatar đã hỏi ngày 5 tháng 3 bởi hung.nx (620 điểm)  

6 Trả lời

0 k thích
Mình search được một bài viết khá là hay :
[code]$(elem)
  .contents()
  .filter(function() {
    return this.nodeType === 3; //Node.TEXT_NODE
  });[/code]
avatar trả lời ngày 5 tháng 3 bởi hoangthehung (1,340 điểm)  
0 k thích
avatar trả lời ngày 5 tháng 3 bởi duonghoaidung (1,050 điểm)  
0 k thích
nếu để bóc tất cả các tags thì bạn có thể dùng :
[code]String.prototype.stripTags=function(){
var rtag=/<.*?[^>]>/g;
return this.replace(rtag,'');
}[/code]
Cách dùng như sau :
[code]var newText=$('selector').html().stripTags();[/code]
avatar trả lời ngày 5 tháng 3 bởi thanhlong.webs (530 điểm)  
0 k thích
jQuery không cung cấp hàm nào thực hiện điều bạn muốn. Bạn cần phải kết hợp hàm contents() : trả lại tất cả child nodes bao gồm cả text nodes và hàm find() : trả lại tất cả child nodes mà ko bao gồm text nodes. Kết hợp như sau :
[code]var getTextNodesIn = function(el) {
    return $(el).find(":not(iframe)").addBack().contents().filter(function() {
        return this.nodeType == 3;
    });
};

getTextNodesIn(el);[/code]
nếu bạn dùng jQuery 1.7 hoặc cũ hơn thì phải thay addBack() bằng addSelf()
Cách này so với các method của DOM thì không hiệu quả mà còn phải include thêm [url=http://bugs.jquery.com/ticket/11275]lib ngoài[/url]

[code]function getTextNodesIn(node, includeWhitespaceNodes) {
    var textNodes = [], whitespace = /^\s*$/;

    function getTextNodes(node) {
        if (node.nodeType == 3) {
            if (includeWhitespaceNodes || !whitespace.test(node.nodeValue)) {
                textNodes.push(node);
            }
        } else {
            for (var i = 0, len = node.childNodes.length; i < len; ++i) {
                getTextNodes(node.childNodes[i]);
            }
        }
    }

    getTextNodes(node);
    return textNodes;
}

getTextNodesIn(el);[/code]
tham số includeWhitespaceNodes quyết định text node với các dấu cách trắng có được trả về hay không
avatar trả lời ngày 5 tháng 3 bởi hungpham (510 điểm)  
0 k thích
[code]$('body').find('*').contents().filter(function () { return this.nodeType === 3; });[/code]
avatar trả lời ngày 5 tháng 3 bởi hoangkien0705 (840 điểm)  
0 k thích
Mình dùng đoạn code :
[code]var myText = $('div').contents(':not(span)').text();[/code]
không phức tạp mà hiệu quả
avatar trả lời ngày 5 tháng 3 bởi dhhuy0704 (790 điểm)  
...