【问题标题】:Jquery returns b.fn.b.init[102]jquery 返回 by.fnb.unit[102]
【发布时间】:2012-08-17 20:04:07
【问题描述】:

我必须选择多个元素,它们都有 class="org-box"。在该框中有一个链接,我想捕获href。所以我这样做了

$("a.org-box").click(function (e) {
 e.preventDefault();
 var link = $(e).html();
 $('.col-right').prepend("<b>" + link +"</b>");
})

我总是得到空值,我尝试过其他选择器,例如
var link = $(e.a).attr("href").html();

同样的运气。

我检查了我从该选择 $("a.org-box") 中得到了什么,我得到了这个 -> b.fn.b.init[102]

如果我这样做$("a.org-box:first").attr("href"); 我得到正确的href,但是当我这样做$("a.org-box").attr("href"); 我只是得到第一个。

我做错了什么??如何选择所有 a.org-box 并在点击时捕获 href?

【问题讨论】:

  • /facepalm 人们不再阅读文档了吗? api.jquery.com/click 说你拿到eventObject作为参数
  • 您使用的是哪个浏览器? jQuery 工厂函数(jQuery$)返回 jQuery.fn.init,但由于它们来自压缩代码,因此名称将显示为 b.fn.b.init
  • dam $(this) 解决了它.... 非常感谢,很抱歉这么菜鸟

标签: jquery html jquery-selectors web


【解决方案1】:
<a href="http://google.com" class="org-box">Click to prepend Google</a>

--

$("a.org-box").on('click', function(e) {
    e.preventDefault();
    $('.col-right').prepend("<b>" + e.target.href +"</b>"); //http://google.com
});

FIDDLE

【讨论】:

    【解决方案2】:

    你可以使用:

    $("a.org-box").click(function (e) {
        $('.col-right').prepend('<b>' + $(this).attr('href') + '<b>');
        e.preventDefault();
    });
    

    this 设置为e.targete.target事件(被点击的项目)的目标。您可以使用$(this).attr('href')$(this).prop('href')this.href,或使用e.target 的任何相同变体。

    我不知道您是否需要链接的内部文本 (.text()) 或 href 属性,所以我假设是后者。

    【讨论】:

      【解决方案3】:

      jQuery 选择器返回所有匹配的元素,所以发生的事情是你从选择器中获取了这些元素的 jQuery 集合,事件数据不是触发事件的元素,正确的实现应该是:

      $(a.org-box).click(function(){
          var link = $(this).html();
          $('.col-right').prepend("<b>" + link +"</b>");
      });
      

      您使用 $(this) 是因为 jQuery 正在迭代集合,所以就像您使用 .each() 时,this 对象会保存您的元素。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-26
        • 1970-01-01
        • 2010-12-04
        • 1970-01-01
        • 1970-01-01
        • 2017-02-08
        • 1970-01-01
        • 2020-01-08
        相关资源
        最近更新 更多