2

这是我想做的事情:

我有一堆像这样的href:

<a href='javascript:void(0);' class='popup'>Word</a>....more stuff....<a href='javascript:void(0);' class='popup'>Another Word</a>...

所以在我的代码中我有:

$('.popup').live('click', function() {

    var selectedPopUp = $(this);

    //get all the popups 
var popupList = $('.popup');

   $.map(popuplist, function(thisPopUp, i) {

       if (selectedPopUp == thisPopUp) { 
          //do something
       }


   });

});

我以为我可以通过这种方式匹配对象,但是当我记录它们时,这就是我得到的:

selectedPopup : [a.popupObj #]

这个弹出窗口:<a class="popupObj" href="#">

我这样做是因为我需要 selectedPopup 的索引 # 因为有一个对象包含所有这些用于显示弹出窗口的属性。显然我在这里以错误的方式进行,有人可以纠正我吗?

谢谢

4

3 回答 3

2

您似乎正在尝试将一个 HTML 元素与一组相关的数据或至少一个 id 进行匹配。这是使用该rel属性的好时机:

所以你的单词链接看起来像这样:

<a rel="1" href="#" class="popup">Word</a>

(顺便说一句,不要使用href='javascript:void(0);'-- 只preventDefault在事件对象上使用,否则返回 false)

现在,您的处理程序如下所示:

$('.popup').on('click', function(e) {
    e.preventDefault();

    var selectedPopUp = $(this).attr('rel');

    // code follows
});

此外,您可以使用以下data属性:

<a href="#" data-title="My popup title" data-content="Blah blah blah!" class="popup">Word</a>

然后你的处理程序看起来像这样:

$('.popup').on('click', function(e) {
    e.preventDefault();

    var title = $(this).data('title');
    var content = $(this).data('content');

    alert(title+"\n"+content);
});

试试看:http: //jsfiddle.net/x4YmG/

另请注意,您应该开始使用该on方法来绑定事件,而不是live. 从 jQuery 1.7 开始,该live方法已被弃用。

相关文档

于 2012-08-14T18:04:52.103 回答
1

这里有几件事..

map通常用于将函数应用于集合中的所有元素

例如,

a = [1,2,3,4]
$.map(a, function(e, i) {
  return e + 1;
});
# => [2,3,4,5]

相反,您正在寻找的是each它允许您迭代元素集合。

a = [1,2,3,4]
$.each(a, function(e, i) {
  if(e % 2 == 0) {
    console.log(e);
  }
});
# => 2
# => 4

您收到错误的原因是因为selectedPopUp = $(this).

这意味着您将 DOM 元素 ( thisPopUp) 与 jQuery 选择器 ( $(this)) 进行比较。

这是一个带有工作示例的 JSFiddle:http: //jsfiddle.net/28D3h/2/

最后,出于好奇——你到底需要做什么才能从列表中选择元素?

于 2012-08-14T18:15:57.157 回答
0

如果组件具有正确的逻辑,您可以尝试使用 jquery index()函数获取锚点的索引,然后将其与函数的i索引进行比较.map()

$('body').on('click','.popup', function() {

   var selectedPopUp = $(this);

   //get all the popups 
   var popupList = $('.popup');
   $.map(popupList, function(thisPopUp, i) {
      console.log(thisPopUp + ' = ' + selectedPopUp.index() + ' y i = ' + i);

      if (selectedPopUp.index() == i) { 
         alert('you selected me!')
      }
   });
});​

这是一个工作示例。

于 2012-08-14T18:36:17.113 回答