基本上我的html看起来像这样:
<label contenteditable>Label</label>
<input type="text">
有很多这些由用户选择,所以我不知道预先知道了多少,并且通过contenteditable
能力编辑了每个标签。
我想将label
和输入value
添加到一个对象中,当完成所有内容时,该对象应该看起来像这样:
{
name: "Charles",
country: "Switzerland",
birthPlace: "USA"
}
或其他什么。
我想我会在map()
的帮助下做到这一点,其中我认为我可以使用previousElementSibling
和innerText
这样:
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)
可以!),这就是为什么我认为它会起作用。
我做错了什么?
答案 0 :(得分:3)
这是因为您已将this
包装在jQuery对象中:$(this)
。 jQuery对象本身没有previousElementSibling
方法,但是this
方法。
将代码更改为:
this.previousElementSibling.innerText;
或者改用jQuery方法:
$(this).prev().text();
作为旁注,您也可以使用this.value
代替$(this).val()
。