jquery:匹配项目被点击与映射项目

时间:2012-08-14 17:59:35

标签: jquery map

这就是我想要做的事情:

我有一堆像这样的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#]

thisPopUp:<a class="popupObj" href="#">

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

由于

3 个答案:

答案 0 :(得分: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方法。

相关文档

答案 1 :(得分: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/

最后,出于好奇 - 你究竟需要做什么才能真正要求能够从列表中选择元素?

答案 2 :(得分: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!')
      }
   });
});​

这是一个有效的example.