使用jQuery查找相关元素

时间:2015-10-25 03:15:34

标签: javascript jquery

点击评论回复按钮后,根据此DOM树,我需要使用$(this),然后导航到下一条评论textarea .task-modal-cmt-reply-textarea

到目前为止,我正在使用jQuery并试图使用.parent().parent().closest('.task-modal-cmt-reply-textarea')和其他一些组合而没有运气。

有人能告诉我一个有效的方法将这个元素变成var吗?

enter image description here

我想要完成的任务......

我甚至在评论回复按钮上点击一下,当点击回复按钮时,回复表单会在父评论下面的DOM中插入...

$document.on('click', '.cmt-reply-btn', function(e) {}  

在此点击事件中,回复表单将被放入DOM ...

$parentCmtDomNode.after(cmtReplyFormTemplateHtml);  

表单在DOM之后我尝试使用jQuery插件为它添加@mention样式功能...

$('.task-modal-cmt-reply-textarea').mentionsInput({});  

问题

@mention库适用于第一次点击的评论表单,但所有其他回复表单都不起作用

6 个答案:

答案 0 :(得分:2)

试试这个

var textarea_value=$(this).closest('.Activity-item').next('.Activity-item').find('form .task-model-cmt-reply-textarea').val();

或者如果它与data-activityid = "12"相关,那么您可以使用

$(document).on('click','.cmt-reply-btn',function(){
   var textarea_value = $(form[data-comment-parent-id = "'+$(this).attr('data-activityid')+' .task-modal-cmt-reply-textarea"]).val();
});

答案 1 :(得分:2)

你需要做另一个.parent(),你所做的两个父()只会让你达到班级水平"活动项目活动 - 评论" data-activity-id = 12.做另一个父母,你应该没事。

答案 2 :(得分:2)

更有效的方法是使用jQuery中的parents api,然后使用.closests

.parents('div')
  

.parents()和.parent()方法类似,只是后者只在DOM树上传递一个级别。此外,$(" html")。parent()方法返回包含文档的集合,而$(" html")。。PEarents()返回空集。

然后将以下子选择器添加到最近的链。

.closest('textarea[name=^"task-modal-cmt-textarea"]')

这将查找名称以task-modal-cmt-textarea开头的最接近的textarea。这比你所拥有的更有效,因为这将消除非textarea元素上的任何查找,然后它只会过滤掉具有该特定名称的textareas。

编辑:更新了OP最近编辑的答案。

$('.task-modal-cmt-reply-textarea').mentionsInput({});  

这将选择所有" .task-modal-cmt-reply-textarea"当时在屏幕上,它不会考虑未来的。要实现您正在寻找的内容,您应该在此链上放置一个子选择器,以允许它附加到创建的最新表单。

$('.task-modal-cmt-reply-textarea',$($parentCmtDomNode).next('textarea')).mentionsInput({});

这应该放在

之后
$parentCmtDomNode.after(cmtReplyFormTemplateHtml);  

答案 3 :(得分:2)

另一种获取对该元素的引用的方法是:

var el = $(this).parent().parent().next().find('.task-modal-cmt-reply-textarea').eq(0);

请注意,eq(0)只返回一个对象而不是一个带有一个元素的数组,根据你想用它做什么,可能需要也可能不需要。

答案 4 :(得分:1)

试试这个:

var txt_html = $(this).parents('.Activity').children("textarea:first").html();

var txt_val = $(this).parents('.Activity').children("textarea:first").val();

在parents()函数中,您需要使用最接近的父类/ id。

答案 5 :(得分:1)

var el = $(this).parents('.Activity-item').next().find('.task-modal-cmt-reply-textarea').eq(0);