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

时间:2017-11-12 02:42:11

标签: javascript jquery html-parsing

我试图将标题放在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())

2 个答案:

答案 0 :(得分: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 :(得分:-1)

你能尝试将这些标题包装在可预测的标签上,比如跨度或标签吗? 也许这样做 $('input').prev('span')