这就是我想要做的事情:
我有一堆像这样的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的索引#,因为有一个对象包含显示弹出窗口的所有这些属性。显然我在这里以错误的方式进行,有人可以让我直截了当吗?
由于
答案 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
方法。
相关文档
data
- http://api.jquery.com/data/ live
(已弃用) - http://api.jquery.com/live/ on
(绑定事件的新方法) - http://api.jquery.com/on/ 答案 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.