从map函数中的上一个兄弟中获取innerText

时间:2015-05-07 09:36:13

标签: javascript jquery

基本上我的html看起来像这样:

<label contenteditable>Label</label>
<input type="text">

有很多这些由用户选择,所以我不知道预先知道了多少,并且通过contenteditable能力编辑了每个标签。

我想将label和输入value添加到一个对象中,当完成所有内容时,该对象应该看起来像这样:

{
  name: "Charles",
  country: "Switzerland",
  birthPlace: "USA"
}

或其他什么。

我想我会在map()的帮助下做到这一点,其中我认为我可以使用previousElementSiblinginnerText这样:

var newObj = {}
    $('input[type=text]').map(function() {
      var fieldName = $(this).previousElementSibling.innerText
      newObj[fieldName] = $(this).val()
    })

可悲的是,这只会返回一个错误说明:

  

无法读取未定义的属性'innerText'

我尝试通过函数传递element属性而不是使用this,我尝试使用prev()(它说它不是函数),我已经尝试了我能想到的一切,但没有任何作用。 “有趣”,当我在地图中console.dir($(this))时,我可以真正看到previousElementSibling.innerText的价值(编辑:显然我不能,但console.dir(this)可以!),这就是为什么我认为它会起作用。

我做错了什么?

1 个答案:

答案 0 :(得分:3)

这是因为您已将this包装在jQuery对象中:$(this)。 jQuery对象本身没有previousElementSibling方法,但是this方法。

将代码更改为:

this.previousElementSibling.innerText;

或者改用jQuery方法:

$(this).prev().text();

作为旁注,您也可以使用this.value代替$(this).val()