使用jQuery查找带有文本的元素

Tim*_*ner 8 jquery textnode

我想在div中创建一个包含文本字符串的所有html元素的数组,例如

<p>some string</p>.  
Run Code Online (Sandbox Code Playgroud)

我不想得到字符串,我希望数组项是元素(在示例中,将是p节点).我事先不知道字符串是什么,所以我找不到匹配的字符串值.我也不希望空文本节点最终出现在数组中.

谢谢!

Vin*_*ert 10

$("#my_div *").filter(function()
{
     var $this = $(this);
     return $this.children().length == 0 && $.trim($this.text()).length > 0;
})
Run Code Online (Sandbox Code Playgroud)

此版本不会返回包含具有文本的元素的父元素,而只返回包含最后一级元素的元素.

可能不是最快但在StackOverflow主页上运行得很好:)


TM.*_*TM. 7

自定义选择器可能对您的情况有所帮助:

jQuery.expr[':'].hasText = function(element, index) {
     // if there is only one child, and it is a text node
     if (element.childNodes.length == 1 && element.firstChild.nodeType == 3) {
        return jQuery.trim(element.innerHTML).length > 0;
     }
     return false;
};
Run Code Online (Sandbox Code Playgroud)

之后,您可以简单地执行此操作:

$('#someDiv :hasText') // will contain all elements with text nodes (jQuery object)
$('#someDiv :hasText').get() // will return a regular array of plain DOM objects
Run Code Online (Sandbox Code Playgroud)

我假设您只是尝试选择仅在其中包含文本的元素.