Javascript 如何获取元素后的文本节点?
使用jQuery。 我有以下html: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]): 我终于意识到我的另一个建议有什么问题,这个问题已经解决了:
<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中,似乎确实如此。你在考什么?不,你说得对。编辑以更正@KevinBouchernextSibling
用于获取节点。。要获取文本,您需要执行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();