【问题标题】:Updating a link on clicking another link using jquery使用 jquery 在单击另一个链接时更新链接
【发布时间】:2016-04-11 17:27:41
【问题描述】:

我是 JQuery 的新手。当我单击第一个链接时,它会向服务器发送一个 Ajax 请求并返回一些数据。到目前为止一切都很好。在回调中,我想更改第二个链接的显示文本。例如 - 6 人喜欢它。我搜索了很多,但无法正常工作。

<div class="container" id="some-id">
    <a class="someclass-1">Like</a>
    <a class="someClass-2">5 people liked it</a>
</div>

我尝试更改第二个链接的文本。但我无法更改文本。我的问题是如何选择和更改第二个链接的文本。

$(this).closest('div').find('.someClass-2').html('6 people liked it');

我的 Ajax 代码类似于:

$(".someClass-1").click(function(e) {
      if ($(this).html() == "Like") {
          var parameters = { statusId: $(this).closest('div').attr('some-id')};
          $.get(
              "/like",
              parameters,
              function(data) { 
               $(this).closest('div').find('.someClass-2').html( data + ' people liked it.');
              }
          );
      }

我在页面上有更多someClass-2 类的链接,但我不想打扰它们。我只想更改当前divsomeClass-2链接的文字。

【问题讨论】:

  • 你的php代码在哪里?
  • 你的 ajax 调用看起来怎么样?
  • 是从 Ajax 获取数据的问题,还是选择正确的元素并更改其中的文本有问题?
  • 我的问题是选择正确的元素并更改其中的文本。再次编辑问题。

标签: javascript jquery html jquery-selectors


【解决方案1】:

使用next()

$(this).next('.someClass-2').html('6 people liked it');

用ajax用当前元素创建一个变量:

$(".someClass-1").click(function(e) {
      var el =  $(this);///see here
      if ($(this).html() == "Like") {
          var parameters = { statusId: $(this).closest('div').attr('some-id')};
          $.get(
              "/like",
              parameters,
              function(data) { 
              el.next('.someClass-2').html( data + ' people liked it.');//if you use $(this) i will refer to the ajax object
              }
          );
      }

或:

 $(".someClass-1").click(function(e) {
          var el =  $(this);///see here
          if ($(this).html() == "Like") {
              var parameters = { statusId: $(this).closest('div').attr('some-id')};
              $.get(
                  "/like",
                  parameters,
                  function(data) { 
                  el.parent().find('.someClass-2').html( data + ' people liked it.');//if you use $(this) i will refer to the ajax object
                  }
              );
          }

【讨论】:

  • 尝试第二个选项
【解决方案2】:

您为什么使用$(this)?如果您有唯一标识符,请使用它。

$(".someClass-2").text("6 people liked it");

当然,把它放在 Ajax success 函数中。

编辑:

var dataNumber;

$(".someClass-1").click(function(e) {
  myElement = $(this);
      if ($(this).html() == "Like") {
          var parameters = { statusId: $(this).closest('div').attr('some-id')};
          $.get(
              "/like",
              parameters,
              function(data) { 
               myElement.siblings('.someClass-2').html( data + ' people liked it.');
              }
          );
      }

使用.siblings() 选择所有兄弟姐妹,然后按类别过滤,如果您只需要选择下一个兄弟姐妹,则使用.next()

另外,注意this 选择器的放置位置...您已将其放在 Ajax 调用中,而不是 click() 函数中,因此它改变了它的值。

【讨论】:

  • 如果您真的需要使用这个相对选择器,请告诉我们并输入您的整个 Ajax 调用代码。
  • 谢谢。有效。 .next() 不起作用,但 .sibling() 工作正常。
  • 太棒了!如果这是您需要的,请接受我的回答。 ;) 而且 - 考虑对您认为有用的所有答案进行投票。
【解决方案3】:

我想这会对你有所帮助

$('#some-id .someClass-2').text('6 people liked it');

它将替换#some-id中所有someclass-2的html。

【讨论】:

    【解决方案4】:

    改变这个

    $(this).closest('div').find('.someClass-2').html('6 people liked it');`
    

    到这里

    $(this).parent().children("a.someClass-2").text("new text");
    

    【讨论】:

    • 这将更改所有具有类“someClass-2”的链接文本。我只想更改当前div中链接的文字
    • $(this).parent().children("a.someClass-2").text("new text"); 从你的 html 中不清楚这个类的元素不止一个
    • 这将更改页面上的所有a.someClass-2 元素
    • @Nitrin Aggrawal - 请接受。 @madalin ivascu - 查看评论 - 这只会更改当前父级中的所有 a.someClass-2
    • 你至少可以更新你的答案 man ,如果 $(this) 引用的是 a 元素而不是 ajax 对象,这个答案将起作用
    【解决方案5】:

    也许是这样的?

    $('.someClass-2').html('6 people liked it');
    

    ...但我不清楚在你的代码中将该行放在哪里。

    【讨论】:

    • 这将改变所有带有 'someClass-2' 类的链接的文本。
    • 这将更改所有具有类“someClass-2”的链接文本。我只想更改当前div中链接的文字
    猜你喜欢
    • 1970-01-01
    • 2016-11-28
    • 1970-01-01
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    • 2018-05-05
    相关资源
    最近更新 更多