有没有更花哨的方法可以在同一类中获得上一个项目
Is there a fancier way to get a previous item with the same class?
我有这样的表行:
<tr class="parent0 row3" data-parent="0">
<td>...</td>
</tr>
<tr class="parent3 row7" data-parent="3">
<td>...</td>
</tr>
<tr class="parent3 row12" data-parent="3">
<td>...</td>
</tr>
<tr class="parent0 row8" data-parent="0">
<td>...</td>
</tr>
<tr class="parent0 row9" data-parent="0">
<td>...</td>
</tr>
因此,如果我有一个点击处理程序:
$(document).on({
"click": function(){
var parentId = $(this).data("parent");
//get previous sibling:
//OPTION A:
var prevParentA =
$(this).prev("parent" + parentId); //works sometimes
//OPTION B:
var prevParentB =
$(this).prevAll("parent" + parentId).eq(0); //works all the time but ugly...
}
}, "tr");
选项A仅在前一项具有相同父项时有效,但在不是的情况下,的prevParentA === []
不是所需结果
选项B似乎总是有效的,但它是丑陋的,因为它选择了所有与该类匹配的前一项,并选择了它找到的第一项。
有比选项B更好的选项吗?
jQuery.fn.prevFind = function(selector) {
var elems = [];
this.each(function(i, item) {
while (item = item.previousSibling) {
if (item.nodeType == 1) {
if ($(item).is(selector)) {
elems.push(item);
break;
}
}
}
});
return(this.pushStack(elems, "prevFind", selector));
}
对于CCD_ 2也可以这样做。
在您的示例中,而不是这样:
$(this).prevAll("parent" + parentId).eq(0);
你会使用这个:
$(this).prevFind("parent" + parentId)
这里是prevFind()
和nextFind()
的一个实现,它使用了一些通用代码:
(function($) {
$.each({
'prevFind' : 'previousSibling',
'nextFind' : 'nextSibling'
}, function(method, dir) {
$.fn[method] = function (selector) {
var elems = [];
this.each(function(i, item) {
while (item = item[dir]) {
if (item.nodeType == 1) {
if ( $.find.matches(selector, [item]).length ) {
elems.push(item);
break;
}
}
}
});
return this.pushStack(elems, method, selector);
};
});
}(jQuery));
小提琴在这儿:http://jsfiddle.net/nDYDL/1/
相关文章:
- 正在将数据主题添加到所有项目
- 动态地改变“”的URL;添加新项目”;链接使用javascript/jquery
- 如何检查管道中未定义的项目
- 有没有一种方法可以添加相同的项目val=“0”;4〃;到JavaScript中数组的每个对象
- 学生搜索项目jquery/javascript
- 如何获取不属于我项目的上一页的URL
- Dojo:访问dijit.form.Select中单击的项目
- 角度的项目列表 ng 重复,ng 单击显示全宽描述
- 我需要为我的朋友在这个项目上提供帮助
- 如何从 HTML 查询中删除项目
- 在Meteor项目中安装并包含npm模块后出错
- 当在Ember中点击一个项目时,我如何将一个活动类添加到项目列表中
- 将单击事件添加到附加的项目中
- 通过另一个php应用程序将我的项目推送到Github存储库中
- 在javascript中搜索项目列表的性能
- 如何将本地依赖项添加到npm项目中
- angularjs移除焦点上的活动类并添加到下一个项目
- 有没有更花哨的方法可以在同一类中获得上一个项目
- 同一类的多个项目,如何用jQuery区分它们
- 用于使用同一类的 JavaScript 一次悬停 3 个项目