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

Jquery 如何从字符串中获取第一个文本节点?,jquery,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="translate

正在尝试获取第一个文本节点

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());
}
var s=$.trim('login Lorem ipsum dummy text这是一个新段落,这是另一个文本');
if($(s).find('*').andSelf().not('b,i').length>1){
警报($(s).find('*:not(:empty)).first().text());
}

它不是给我第一个文本节点,即“登录”,而是givig me “lorem ipsum…”这是第二个文本节点

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


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

如果您的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"
更新2

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

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

那么你现在所做的有什么问题吗?@Austinbrunkhost我已经更新了问句Mind如果我问的话,有没有可能包含这样的坏标签:
html>blah blah blah
?@JonathanChow!不,它不会包含任何断开的标记,但此字符串只是一个示例,它可能不是每次都是这样,这意味着此位置可能不会始终有文本节点。@atif这适用于“登录”的任何情况例如,未包含在字符串中的元素中。@AustinBrunkhorst如果要绕过某些标记,如、、等,该怎么办?