提问人:MysteryPancake 提问时间:11/12/2017 最后编辑:dhiltMysteryPancake 更新时间:11/12/2017 访问量:361
jQuery:获取上一个文本节点的文本值?
jQuery: Get the text value of the previous text node?
问:
我正在尝试将标题放在 https://www.plot-generator.org.uk/story 上的表单元素上方。但是,这些标题是文本节点,因此我不确定如何获取它们。该网站还包含许多不可预测的换行符:
Title 1
<br>
<br>
<input type="text" name="blah">
<br>
Title 2
<br>
<input type="text" name="blah2">
那么,我将如何从中获取文本?Title 1
input[name="blah"]
另外,我将如何从中获取文本?Title 2
input[name="blah2"]
我尝试使用.prev(),但我不知道如何使用它:
console.log($("input[name=blah]").prev($(this).contents().filter(function() {
return this.nodeType === 3
})).text())
答:
1赞
dhilt
11/12/2017
#1
我会使用以下方法。当然,它可以被推广/优化,但它应该可以工作:
var list = $("input[name=blah]").parent()[0].childNodes;
var input1 = null, input2 = null, value, i1Value = null, i2Value = null;
for(var i = list.length - 1; i >= 0; i --) {
if(list[i].nodeName === 'INPUT') {
if(list[i].name === 'blah') {
input1 = i;
}
else if(list[i].name === 'blah2') {
input2 = i;
}
continue;
}
if(list[i].nodeType === 3) { // text node
value = list[i].nodeValue.trim(); // to ignore the gaps
if(value) {
if(input1 !== null && i1Value === null) {
i1Value = value;
}
if(input2 !== null && i2Value === null) {
i2Value = value;
}
}
}
if(i1Value !== null && i2Value !== null) {
break;
}
}
console.log(i1Value); // Title 1
console.log(i2Value); // Title 2
-1赞
robertoandres24
11/12/2017
#2
您可以尝试将标题包装在可预测的标签上,例如跨度或标签吗?
也许会像这样$('input').prev('span')
评论
0赞
MysteryPancake
11/12/2017
我不拥有那个网站,所以不幸的是,我无法改变他们格式化它的方式。
评论
$("input[type=text]")
next
prev