Jquery - prevAll无法找到元素

时间:2014-03-14 17:43:21

标签: javascript jquery html

我正在尝试实现一个简单的事情:通过单击具有" .remove_summary"类的文本。我想得到最接近的前一个textarea的值。我整个晚上都遇到了这个问题并尝试了.prevAll(),. closest()和.parent()方法,仍然得到了#34; undefined"数据。 由于我的DOM有点复杂(我使用的是Django框架),我做了一个截图。

enter image description here

点击带红色下划线的文字"删除摘要"我想获得标记为textarea的.val()。

我的代码:

$(".remove_summary").click(function(){
  var $txtarea = $(".remove_summary").closest('#summary').find('textarea').val();
  alert($txtarea);
});

});

P.S。我不能将textarea ID放在代码中,因为我的应用程序的业务逻辑禁止它。我正试图找到衣柜textarea(看着#34;在顶部")。

有人可以解释为什么我的代码无效吗?

4 个答案:

答案 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