1

试图获得第一个文本节点。

var s = $.trim('login<tbody> <tr> <td class="translated">Lorem ipsum dummy text</td></tr><tr><td class="translated">This is a new paragraph</td></tr><tr><td class="translated"><b>Email</b></td></tr><tr><td><i>This is yet another text</i></td> </tr></tbody>');

if($(s).find('*').andSelf().not('b,i').length > 1){
    alert($(s).find('*:not(:empty)').first().text());
}

这是我在 jsfiddle 上所做的事情的链接

它没有给我第一个文本节点“登录”,而是给我 “lorem ipsum ...”,这是第二个文本节点。

笔记:

HTML 字符串是动态的,因此不要考虑为其分配类或 id 或将其包含在某些 HTML 元素或子字符串等中。

4

1 回答 1

2

如果您的 HTML 已经是一个字符串,我将使用它substring()来获取导致第一个尖括号的所有字符:

var s = $.trim('login<tbody> <tr> <td class="translated">Lorem ipsum dummy text</td></tr><tr><td class="translated">This is a new paragraph</td></tr><tr><td class="translated"><b>Email</b></td></tr><tr><td><i>This is yet another text</i></td> </tr></tbody>');

s.substring(0, s.indexOf('<'));
// "login"

更新

如果它不在开头或undefined没有文本节点,这将找到第一个文本节点:

$(s).contents().filter(function() { return this.nodeType == 3 })[0]

更新 2

这也可以奏效,尽管我没有仔细研究过这样做的后果:

$(s).find('*').contents().filter(function() { return this.nodeType == 3})[0]
于 2013-01-23T06:54:03.490 回答