这是我的代码:
<div class="superBlock" id="blabla">
<a class="watch"><img src="images/blabla.png"/></a>
</br>
<div class="btn-group-xs" role="group">
<a type="button" class="btn btn-info info" data-toggle="modal" data-target="#myModal">Information</a>
</div>
</div>
<div class="modal fade" id="myModal" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-footer">
<a type="button" class="btn btn-success watch" data-dismiss="modal">Watch</a>
</div>
</div>
</div>
</div>
$('.info').click(function() {
var $watchID = $(this).parents('.superBlock').attr('id');
});
$('.watch').click(function() {
if($(this).parents('.superBlock').attr('id') != "") {
var $watchID = $(this).parents('.superBlock').attr('id');
}
alert($watchID);
});
我想做的就是将$ watchID设置为.superBlock的ID,无论我单击.watch按钮还是.info按钮。
当我单击信息按钮后单击模态监视按钮时,我得到
$watchID
为“未定义”。如果
$watchID
未定义,我希望$(this).parents('.superBlock').attr('id')
继续设置为.superBlock的ID。因此,$watchID
不能更改为未定义的$(this).parents('.superBlock').attr('id')
。我该怎么办?这仅仅是语法吗?如果是这样,我应该如何改变呢?
HTML div重复使用不同的ID,这就是为什么我不能仅将ID设置为“ blabla”。
最佳答案
要判断选择器是否匹配任何内容,请检查jQuery对象的长度。
var superblock = $(this).closest(".superBlock");
if (superblock.length > 0) {
$watchID = superblock.attr('id');
}
另外,如果希望
$watchID
变量在两次调用之间保留,则应在函数外部声明它。您的变量是每个函数的局部变量,因此在函数返回时将被丢弃。而且,由于您只希望该类具有最接近的父类,因此请使用
.closest()
而不是.parents()
,后者会在整个DOM层次结构中搜索多个匹配项。