我正在尝试实现一个简单的事情:通过单击具有" .remove_summary"类的文本。我想得到最接近的前一个textarea的值。我整个晚上都遇到了这个问题并尝试了.prevAll(),. closest()和.parent()方法,仍然得到了#34; undefined"数据。 由于我的DOM有点复杂(我使用的是Django框架),我做了一个截图。
点击带红色下划线的文字"删除摘要"我想获得标记为textarea的.val()。
我的代码:
$(".remove_summary").click(function(){
var $txtarea = $(".remove_summary").closest('#summary').find('textarea').val();
alert($txtarea);
});
});
P.S。我不能将textarea ID放在代码中,因为我的应用程序的业务逻辑禁止它。我正试图找到衣柜textarea(看着#34;在顶部")。
有人可以解释为什么我的代码无效吗?
答案 0 :(得分:1)
您需要使用:
$(".remove_summary").click(function(){
var $txtarea = $(this).closest('#summary').find('textarea').val();
alert($txtarea);
});
或只是:
var $txtarea = $('#summary').find('textarea').val();
因为id
是唯一的,textarea
#summary
元素
您的选择器无效,因为 docs 关于.closest()
:
对于集合中的每个元素,获取与之匹配的第一个元素 选择器通过测试元素本身并遍历其中 DOM树中的祖先。
在您的情况下,当关注DOM树.remove_summary
时,<b>
标记的子项是#summary
的下一个兄弟,因此.remove_summary
段落不是后代#summary
div。
根据你的小提琴,你可以这样做:
$(".remove_summary").click(function(e){
e.preventDefault();
var $txtarea = $(this).closest('b').prevAll('.summary').find('textarea').val();
alert($txtarea);
});
<强> Updated Fiddle 强>
答案 1 :(得分:0)
它无效,因为remove_summary
不是summary
的后代。
您可以使用#summary
元素,因为元素的ID将是唯一的
var $txtarea = $('#summary').find('textarea').val();
答案 2 :(得分:0)
从屏幕截图中的标记看起来可以使用
$(".remove_summary").click(function(){
var _textarea = $(this).parent("#summary").find("textarea") ..
}
编辑 - 错过了选择器("#summary")
抱歉
答案 3 :(得分:0)
由于您使用的是id,因此您只需提及id选择器
即可 $('#summary').find('textarea').val();
id
在网页中应该是唯一的,这应该根据您的标记找到您的textarea