在按钮上使用 'this' 的 jQuery 选择

Posted

技术标签:

【中文标题】在按钮上使用 \'this\' 的 jQuery 选择【英文标题】:jQuery selection using 'this' on a button在按钮上使用 'this' 的 jQuery 选择 【发布时间】:2017-01-26 13:30:21 【问题描述】:

我有 5 个 div,每个 div 里面都有 5 个文本

 <div class="text">
    <%= theComment.text %> 
 </div>

我正在使用 nodejs、mongodb 和 mongoose。

我有一个名为 EDIT 的按钮,其类为“editBTN”

我有我的 jQuery 代码:

$(".editBTN").click(function()
  console.log($(".text").text())
);

我想要的是,每次我单击其中一个 div 上的编辑按钮时,它都会选择它的文本消息。发生的事情是,它选择了所有 5 个 div 的所有文本。我只想在我只点击编辑按钮的地方选择文本 div。 这与“this”关键字有关吗?我怎样才能把它放在我的 jquery 代码上。

这是我的 ejs 代码:

    <% include partials/header %>
<div class="container" id="profileShow">
<div class="row">
    <div class="col-md-3">

    </div>
    <div class="col-md-9">
        <div class="thumbnail">
        <div class="text-center"><h2><%= userID.name %></h2>

            <img src="<%= userID.image %>">
            <p><em>Submitted by: <strong><%= userID.author.username %></strong> </em></p>

            </div>

                <div style="text-align:center;">
                 <form action="/index/<%= userID._id%>/edit" method="GET" id="profileForm">
        <% if(currentUser && userID.author.id.equals(currentUser._id)) %>
                 <button class="ui grey button tiny">
                    <i class="configure icon"></i>
                    Edit profile
                    </button>
                    </form>
                <form action="/index/<%= userID._id%>?_method=DELETE" method="POST" id="profileForm">
                         <button class="negative ui button tiny">
                            <i class="configure icon"></i>
                            Delete profile
                            </button>
        <%  %>
                    </form>
                </div>
        </div>





<div class="well well-sm clearfix">


<div id="commentsDiv">
    <h3 class="ui dividing header">Comments</h3>
</div>

                <% userID.comments.forEach(function(theComment) %>

<div class="ui comments">

  <div class="comment">
    <a class="avatar" href="/profile/<%= theComment.author.id %>">
      <img src="<%= theComment.author.image %>">
    </a>
    <div class="content">

      <a class="author" href="/profile/<%= theComment.author.id %>"><%= theComment.author.username%></a>
      <div class="metadata">
        <span class="date"><%= theComment.date %></span>
      </div>
      <div class="text">
         <%= theComment.text %> 
      </div>
      <div class="actions">
        <a class="reply">Reply</a>
      </div>
              <div class="editdelete-inline">
                    <% if(currentUser && theComment.author.id.equals(currentUser._id)) %>
                <form action="/index/<%= userID._id %>/comments/<%= theComment._id %>?_method=DELETE" method="POST"><button class="mini ui red button" >Delete</button></form>
                <button class="mini ui orange button editBTN">Edit</button>
                    <%  %>
               </div>
    </div>
  </div>
</div>
        <% ); %>



<% if(currentUser) %>
<form action="/index/<%= userID._id %>/comments" method="POST">
<div class="ui fluid action input">
<input type="text" class="form-control" name="comment[text]" placeholder="Add comment..." >
<button class="btn btn-primary btn-xs">
Send<i class="send icon"></i>
</button>
</div>                
</form>
<%  else  %>
    <div class="alert alert-danger" role="alert">Login / Register to submit a comment</div>
<%  %>
        </div>
        </div>
    </div>
</div>  




<% include partials/footer %>

谢谢!

【问题讨论】:

把你所有的html结构,用按钮。 有点乱,但是,等一下 【参考方案1】:

我会对在我之前回答但使用 .closest 的人做类似的事情。 如果编辑按钮一直在 .content div 中,那么我将使用以下内容:

$(".editBTN").click(function()  
  var $text = $(this).closest('.content').find('text');
  console.log($text.text());
);

我认为 .closest() 在标记更改方面是最安全的选择。因为 .parent().parent() 对你的 HTML 结构做了很多假设,如果你添加更多的内部 div 并且 .parents() 会循环遍历所有祖先并根据选择器过滤它们,所以它看起来像很多额外的努力得到你想要的结果。

【讨论】:

谢谢兄弟!有用!所有在这里回答的人都有效,但我想我会选择这个答案【参考方案2】:

发生这种情况是因为文本类应用于您的所有文本,因此它们将全部选中。您可以在每个 foreach 中添加 id,以便在之后单独识别它们,或者只查找 HTML 结构:

$(".editBTN").click(function()
   var $text = $(this).parents('.content').find('.text');
   console.log($text.text());
);

【讨论】:

【参考方案3】:

试试这个:

$(".editBTN").click(function()
  console.log($(".text", $(this).parent().parent()).text())
);

外部 jQuery 调用的第二个参数表示要在其中搜索第一个参数表示的元素的元素。

【讨论】:

谢谢大哥!

以上是关于在按钮上使用 'this' 的 jQuery 选择的主要内容,如果未能解决你的问题,请参考以下文章

jQuery向后选择

使用 jquery 在按钮单击上添加文本到简单表单

对动态元素使用 JQuery 选择器和“this”

jQuery如何使$(this)选择器触发多个类

jQuery 如何使 $(this) 选择器触发多个类

jquery 多个选择器,包括“this”——最好的简洁语法