如何从字符串中获取第一个文本节点?

时间:2013-01-23 06:48:08

标签: jquery

尝试获取第一个文本节点。

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());
}

Here is a link to what i am doing on jsfiddle

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

注意:

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

1 个答案:

答案 0 :(得分: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]