jQuery:获取上一个文本节点的文本值?

jQuery: Get the text value of the previous text node?

提问人:MysteryPancake 提问时间:11/12/2017 最后编辑:dhiltMysteryPancake 更新时间:11/12/2017 访问量:361

问:

我正在尝试将标题放在 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 1input[name="blah"]

另外,我将如何从中获取文本?Title 2input[name="blah2"]

我尝试使用.prev(),但我不知道如何使用它:

console.log($("input[name=blah]").prev($(this).contents().filter(function() {
    return this.nodeType === 3
})).text())
JavaScript jQuery HTML 解析

评论

0赞 Aluan Haddad 11/12/2017
为什么不呢?这让他们都得到了。避免依赖顺序和其他变化无常的特征。$("input[type=text]")
0赞 MysteryPancake 11/12/2017
@AluanHaddad我不想获取输入文本节点,我想获取其上方的实际文本,例如“Blah”和“Blah 2”。对不起,我更新了我的帖子以使其更清楚。
0赞 Aluan Haddad 11/12/2017
好的,根据该网站的结构,您需要做出很多假设。它不使用标签或任何东西。这与其说是关于/不如说是关于在输入之间获取文本。nextprev
0赞 Sagar 11/12/2017
你能把文本放在一些div、class或id中吗?
0赞 MysteryPancake 11/12/2017
@SagarBhattacharya我不拥有那个网站,所以不幸的是,我无法改变他们格式化它的方式。

答:

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
我不拥有那个网站,所以不幸的是,我无法改变他们格式化它的方式。