Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jquery-prevAll无法找到元素_Javascript_Jquery_Html - Fatal编程技术网

Javascript Jquery-prevAll无法找到元素

Javascript Jquery-prevAll无法找到元素,javascript,jquery,html,Javascript,Jquery,Html,我试图实现一件简单的事情:通过点击文本,它有一个类“.remove_summary”,我想得到最近的前一个文本区域的值。这个问题困扰了我整整一个晚上,我尝试了.prevAll()、.closest()和.parent()方法,但仍然得到了“未定义”的数据。 因为我的DOM有点复杂(我使用的是Django框架),所以我做了一个屏幕截图 单击带红色下划线的文本“Remove summary”后,我想获取标记的textarea的.val() 我的代码: $(".remove_summary").cl

我试图实现一件简单的事情:通过点击文本,它有一个类“.remove_summary”,我想得到最近的前一个文本区域的值。这个问题困扰了我整整一个晚上,我尝试了.prevAll()、.closest()和.parent()方法,但仍然得到了“未定义”的数据。 因为我的DOM有点复杂(我使用的是Django框架),所以我做了一个屏幕截图

单击带红色下划线的文本“Remove summary”后,我想获取标记的textarea的.val()

我的代码:

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

另外,我不能将textarea ID放入代码中,因为我的应用程序的业务逻辑禁止它。我试图找到壁橱文本区域(同时查看“顶部”)

有人能解释一下为什么我的代码不起作用吗?

您需要使用:

$(".remove_summary").click(function(){
    var $txtarea = $(this).closest('#summary').find('textarea').val();
    alert($txtarea);
});
或者只是:

var $txtarea = $('#summary').find('textarea').val();
因为
id
是唯一的,并且在
摘要中只有一个
textarea
元素

您的选择器不工作,因为从关于
.closest()

对于集合中的每个元素,获取与 通过测试元素本身并向上遍历其 DOM树中的祖先

在您的情况下,在遵循DOM树时,remove_summary
标记的子级,该标记是
#summary
的下一个同级,因此
。remove_summary
段落不是
#summary
div的后代


根据你的小提琴,你可以做:

$(".remove_summary").click(function(e){
    e.preventDefault();
    var $txtarea = $(this).closest('b').prevAll('.summary').find('textarea').val();
    alert($txtarea);
});

它不起作用,因为
删除\u summary
不是
summary
的后代

您可以只使用
#summary
元素,因为元素的ID是唯一的

var $txtarea = $('#summary').find('textarea').val();

从屏幕截图中的标记来看,您可以使用

$(".remove_summary").click(function(){  
   var _textarea = $(this).parent("#summary").find("textarea") .. 

}

编辑-缺少选择器
(“#摘要”)
抱歉

由于您使用的是id,您只需提及id选择器即可

  $('#summary').find('textarea').val();

id
在网页中应该是唯一的,并且应该根据您的标记找到您的文本区域

谢谢您的快速回复!我开始想办法了。但我的DOM将包含许多类似的div,其中包含id=“summary”和相同的“remove sumary”文本。我的问题是:当我从类为“.remove\u summary”的文本中查看DOM顶部时,如何找到最近的文本区域?我想我需要先将div的#summary id更改为class.summary,因为id必须是唯一的。那么我怎么才能找到“文本顶部最近的文本区域。删除\u摘要”呢?实际上id是唯一的,你需要使用类,然后如果你的HTML标记没有更改,你可以使用我答案中的第一个选项。我的HTML标记没有更改,但不幸的是,在使用您答案的第一个变体时,我遇到了一个未定义的错误。我的代码有点乱,但是你能看看这个JSFIDLE吗?正如我所说,我的目标是在文本的顶部找到最接近的textarea val()。删除_摘要:谢谢,但不幸的是JS区域对我来说是空的,也许我弄错了什么/非常感谢。代码终于正常工作了,谢谢您的时间和帮助:)