Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何获取元素后的文本节点?_Javascript_Jquery_Jquery Selectors_Textnode - Fatal编程技术网

Javascript 如何获取元素后的文本节点?

Javascript 如何获取元素后的文本节点?,javascript,jquery,jquery-selectors,textnode,Javascript,Jquery,Jquery Selectors,Textnode,使用jQuery。 我有以下html: <input type="checkbox" name='something' value='v1' /> All the world <br /> 全世界 我怎样才能只得到文本呢。我应该使用什么选择器? (我需要“全世界”) 我也不能触摸HTML…只需使用普通的JavaScriptnextSibling,尽管您必须“退出”jQuery才能使用该方法(因此[0]): 我终于意识到我的另一个建议有什么问题,这个问题已经解决了:

使用jQuery。 我有以下html:

<input type="checkbox" name='something' value='v1' /> All the world <br />
全世界
我怎样才能只得到文本呢。我应该使用什么选择器? (我需要“全世界”)


我也不能触摸HTML…

只需使用普通的JavaScript
nextSibling
,尽管您必须“退出”jQuery才能使用该方法(因此
[0]
):

我终于意识到我的另一个建议有什么问题,这个问题已经解决了:

var text = $('input:checkbox[name="something"]').parent().contents().filter(
    function(){
        return this.nodeType === 3 && this.nodeValue.trim() !== '';
    }).first().text();

为了确保只从
br
之前获取
textNodes
(尽管坦率地说,这变得过于复杂,第一个建议更容易实现,而且我怀疑是可靠的):


.

尝试使用DOM函数
.nextSibling
选择下一个节点(包括文本节点),并使用
nodeValue
获取文本
全世界

$(':checkbox')[0].nextSibling.nodeValue

如果将
标签添加到标记中(推荐使用),可以通过以下方式执行:

HTML


为了给一个老问题添加一个示例,请将文本包装在标签中

$('input[type=“checkbox”]”)
.每个功能(索引,el){
var textNode=$(el.nextSibling);
if(textNode[0].nodeType==Node.TEXT\u节点){
让checkwrap=$(el).wrap('').closest('.found');
textNode.appendTo(换行检查);
}
});
找到
{
边框:固体青色1px;
颜色:蓝色;
填充:0.5em;
显示:内联块;
保证金:0.3em;
}
找到标签{
颜色:青柠;
}

一瞬间
全世界
一个跨度内的全世界2个
全世界在一个跨度内3
如果要使用
过滤器
,则可以在文本节点上很好地使用
.text()
。。无需
[0]。节点值
。。只是jQuery没有选择文本节点的方法。这不会生成文本。即使OP请求节点,似乎文本实际上是需要的。只需在末尾添加
.data
.nodeValue
。@KevinBoucher:在Chromium 18/Ubuntu11.04中,似乎确实如此。你在考什么?不,你说得对。编辑以更正@KevinBoucher
nextSibling
用于获取节点。。要获取文本,您需要执行
nodeValue
+1,假设这是标签(很可能),但我会使用有效的选择器API选择器,以便可以使用
querySelectorAll
<代码>$(“#某物+标签”)
下一个同级选择器有什么问题?什么都没有,但
:首先,
是一个专有的Sizzle选择器,因此它默认为Sizzle的基于JavaScript的选择器引擎,而不是浏览器的本地选择器引擎。@KevinBoucher对,但关键是它不是CSS选择器,因此querySelectorAll无法使用,这意味着必须解析字符串。不能使用label,我不能触摸HTML
var text = $('input:checkbox[name="something"]').parent().contents().filter(
    function(){
        return this.nodeType === 3 && this.nodeValue.trim() !== '' && $(this).prevAll('br').length === 0;
    }).text();
$(':checkbox')[0].nextSibling.nodeValue
<input type="checkbox" id="something" name="something" value="v1" /><label for="something">All the world</label> <br />
var text = $( '#something ~ label:first' ).text();