单击链接时,查找具有某个子项的父项是否存在jquery
when link is clicked, find if parent with certain child exists jquery
我要寻找的是一种确定单击链接的父级是否包含与预定子级匹配的id的方法,类为row-fluid
。
到目前为止,我尝试过的就是这里。(jsFiddle)
有人能解释一下为什么我的代码不起作用吗?而且,我的代码非常糟糕,所以任何关于速记代码的建议都可以。我经常想得太多
<div class="row-fluid">
<div id="success-1">Entry One</div>
<div class="span3"> <a href="#" id="1" class="delete-me">delete</a>
</div>
</div>
<div class="row-fluid">
<div id="accord-2">Entry Two</div>
<div class="span3"> <a href="#" id="2" class="delete-me">delete</a>
</div>
</div>
<div class="row-fluid">
<div id="success-3">Entry Three</div>
<div class="span3"> <a href="#" id="3" class="delete-me">delete</a>
</div>
</div>
JS:
$('.delete-me').on('click', function () {
var id = $(this).attr("id");
if ($(this).parent(".row-fluid").has("#accord-*")) {
var name = $("#accord-" + id).html();
alert(name);
}else{
var name = $("#success-" + id).html();
alert(name);
}
});
以下操作将起作用-只有if
中的条件已更改:
$('.delete-me').on('click', function () {
var id = $(this).attr("id");
if ($(this).closest(".row-fluid").has("[id^='accord-']").length > 0) {
var name = $("#accord-" + id).html();
alert(name);
}else{
var name = $("#success-" + id).html();
alert(name);
}
});
演示:http://jsfiddle.net/RZPW2/15/
您的if
条件的主要问题:
if($(this).parent(".row-fluid").has("#accord-*")) {
它总是truthy,因为.has()
方法返回的是jQuery对象,而不是布尔对象,并且任何对象都是truthy。
此外,.parent()
方法只获取直接父元素,在锚点的情况下,它不是.row-fluid
元素-请使用.closest()
来查找该类的最近祖先。
最后,要通过以特定字符串开头的id
进行选择,请使用以选择器开头的属性。
如果每个组总是包含accord-*
或success-*
元素,则可以为这两个元素都指定一个公共类:
<div id="success-1" class="entryName">Entry One</div>
因为那样你就根本不需要if
测试了:
$('.delete-me').on('click', function () {
var name = $(this).closest(".row-fluid").find(".entryName").html();
alert(name);
});
演示:http://jsfiddle.net/RZPW2/18/
代码中的几个问题:
-
$(this).parent(".row-fluid")
不起作用,因为该行不是链接的直接父级,您应该使用closest(".row-fluid")
向上遍历并找到与选择器匹配的第一个父级 -
您不能像在
has("#accord-*")
中那样在选择器中使用通配符,您需要使用以选择器开头的属性:"[id^='accord-']"
,而且has()
返回jQuery对象,而不是布尔 -
这不是一个真正的问题,但您应该使用数据属性来遵守HTML5标准
<a href="#" data-id="3" class="delete-me">delete</a>
如果你想稍微简化一下,你可以写
$('.delete-me').on('click', function () {
var id = $(this).data('id');
alert($(this).closest('.row-fluid').find('#success-'+id+',#accord-'+id).text());
});
更新的fiddle
现在,我还没有完全了解这一点,但我认为这与访问正确的父级有关,从父级遍历DOM
并获取正确的DIV
。如果这永远是你的DIV
的结构,那么你可以这样做:
$(".delete-me").on("click", function () {
var obj = $(this), id = obj.attr("id"), parent = obj.parent().parent(), name = parent.find("div[id$='-" + id + "']").html();
alert(name);
});
它使用以选择器(id$=
)结尾,或者因为这是树中唯一一个带有ID
的DIV
,所以可以使用has属性,如下所示:
$(".delete-me").on("click", function () {
var obj = $(this), parent = obj.parent().parent(), name = parent.find("div[id]").html();
alert(name);
});
- jQuery中是否内置了任何字符串格式化函数
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 是否有一个JS/jQuery函数可以获取某个类的每个元素的ID
- 是否有任何方法可以使用jQuery替换在数组中定义值的文本
- 是否可以禁用jquery中的单个单选按钮
- 如何使用jquery确定用户是否年满18岁
- jQuery检测浏览器是否支持Zoom
- 使用 jQuery 检查所有值是否为空或已填充
- 如何检查元素的内容是否为空,如果为空,请在jquery中删除该元素
- 如何使用jQuery可编辑插件检查ajax是否成功完成
- 使用Booklet Jquery插件,我如何验证最后一页是否显示
- 是否可以仅通过jQuery将图像替换为用户动态选择的另一个图像
- 是否可以使用jquery或javascript将自动增量类添加到列表中
- 如何检查链接是否有文本,并根据文本值评估条件-Jquery/JS
- jQuery中的attr()是否强制小写
- 使用jQuery 1.8.1准备好多个$(document).是否有任何开销
- 使用js/jQuery检查对象(而不是元素)是否真的存在
- 是否可以在调用时动态设置Jquery Accordion的活动面板
- jQuery:确认.html()是否可添加
- 检测是否JQuery CDN down并处理它