Javascript 获取元素后的特定文本节点

Javascript 获取元素后的特定文本节点,javascript,jquery,html,Javascript,Jquery,Html,我试图获取一个特定的字符串,“(文本1)”,“(文本2)”等等。我无法更改HTML 当我这样做时: $(this).parent().html(); // $(this) is equivalent to $('a.more'). 我得到: <a class="more" href="/e1">Event 1</a> (TEXT 1)<br> <a class="more" href="/e2">Event 2</a> (TEXT 2

我试图获取一个特定的字符串,“(文本1)”,“(文本2)”等等。我无法更改HTML

当我这样做时:

$(this).parent().html(); // $(this) is equivalent to $('a.more').
我得到:

<a class="more" href="/e1">Event 1</a> (TEXT 1)<br>
<a class="more" href="/e2">Event 2</a> (TEXT 2)<br>
<a class="more" href="/e3">Event 3</a> (TEXT 3)<br>

如何使用JavaScript或jQuery获取特定字符串?

您可以使用底层DomeElement的
nextSibling
方法获取同级textNode。试试这个:

console.log($('.more')[0].nextSibling.nodeValue)); // = '(TEXT 1)'


请注意,要在其他
.more
元素旁边获取textNode,您可以将索引更改为
1
2
,正如您的帖子所暗示的,如果要创建自定义
.nextText()
方法,只需访问DOM元素的下一个同级的:

$.fn.nextText = function() {
  return this.length ? this[0].nextSibling.nodeValue : null;
};
然后可以使用
.eq()
方法通过其索引获取元素,并使用自定义方法:


如果要添加参数以传递要从中检索文本的元素的索引,请执行以下操作:


如果要获取多个元素和文本节点直到某个特定元素(如OP在注释中所做的),可以使用此自定义
.nextextentil()
方法:

用法:

$('.more').eq(0).nextTextUntil('.more');
将返回:

(TEXT 1 MORE TEXT)
基于以下HTML:

<a class="more" href="/e1">Event 1</a> (TEXT 1 <em>MORE TEXT</em>)
(文本1更多文本)

这似乎有效,还是我误解了你的确切问题

document.querySelector('.more').nextSibling.nodeValue

现在,如果需要为给定节点执行此操作的函数:

getNextTextnodeValue = function(element) {
    return element.nextSibling.nodeValue;
};

如果真的将其写入jQuery插件,只会给代码添加大量的内容,而您将一无所获,因为它是不可链接的(返回字符串,而不是jQuery对象)。

我的建议不是Efficient,但jQuery的全部内容在于找到一个可以减少搜索的小区域:

$.fn.getTextNodes=函数(contentText){
返回$(this.find(“:not(iframe)”).addBack().contents().filter(函数(){
返回this.nodeType==3&&this.nodeValue.indexOf(contentText)!=-1;
});
};
$(函数(){
var result=$(“#areaWhereToSearch”).getTextNodes(“(文本1”);
如果(result.length==1){
$('#result').text($('#areaWhereToSearch').getTextNodes('(text 1)')[0].nodeValue);
}
});

(正文1)
(正文2)
(正文3)

也许您可以将(文本n)包装在。。。搜索跨距…html不是我的,我无法更改它。如果它是我的html,对我来说这很容易。我有一个问题。当html看起来像这样时:(TEXT 1 MORE TEXT ASDF)-helloworld
我只得到“(TEXT 1”。我如何获得完整的”(TEXT 1 MORE TEXT ASDF)-helloworld”?@rotaercz如何知道何时停止检索文本?是否要在下一个
之前获取所有元素和文本节点。更多
元素?基本上,我希望检索与“(文本1)”相同的兄弟级别(和子级)的所有内容。这有意义吗?@rotaercz这样做吗?我创建了一个
.nextextentil()
方法。效果很好。如果我能再次投票支持你的答案,我会的。谢谢!
$('.more').eq(0).nextTextUntil('.more');
(TEXT 1 MORE TEXT)
<a class="more" href="/e1">Event 1</a> (TEXT 1 <em>MORE TEXT</em>)
getNextTextnodeValue = function(element) {
    return element.nextSibling.nodeValue;
};