jQuery .prev()的一个类型,不管它的's父等
jQuery .prev() of a type regardless of it's parent etc
是否有一种简单的方法来获得DOM中元素的前一次出现?如果我在看#text3
,我想要得到之前的输入#text2
。
<div>
<input id="text1" type="text" value="text1" />
</div>
<div>
<p>Choose your race!</p>
<input id="text2" type="text" value="text2" />
</div>
<div>
<div class="labeledField">
<label>Text 3:</label>
<input id="text3" type="text" value="text3" />
</div>
</div>
.prev('input')
不起作用,因为它在父级内,.prevAll('input')
似乎也只搜索父级……我遗漏了什么吗?这感觉应该比$('#text3').parent().prev().find('input')
:D
您可以使用 $.index()
,就像这样:
var previous = null;
var inputs = $('input');
var index = inputs.index(this);
if (index > 0) {
previous = $(inputs[index-1])
}
例如: http://jsfiddle.net/pYaBL/1/
我创建了一个新的jQuery插件,它返回"真实的"前一个输入元素。包括以下代码:
(function($){
$.fn.realPrev = function(selector){
var thisElem = this.get(0); //Get DOM element for comparison
var lastElement, foundElement = null;
$(selector).each(function(){
if(this == thisElem){
foundElement = lastElement;
return false;
}
lastElement = this;
});
return $(foundElement);
}
})(jQuery);
用法:
$("#input3").realPrev("input");
小提琴:http://jsfiddle.net/QWRWh/
其他两种答案都假定您正在使用的元素与您正在查找的元素具有相同的类型。如果它是任意的,这应该可以工作(在较大的文件上性能不是很好)。
把其他两个答案结合起来:
(function($){
$.fn.realPrev = function(selector){
var all = $("*");
return all.slice(0,all.index(this)).filter(selector).last();
}
})(jQuery);
http://jsfiddle.net/QWRWh/1/相关文章:
- 不能从angular2中的子组件指定父组件中的数组
- 如何使用jquery强制一个单词更改大小写等以保留品牌
- 是否可以从父类访问子类的属性
- 使用此选项选择父类内部的类
- jQuery最近父级的数据属性选择器
- 如何通过溢出来判断元素被切断了多少像素:隐藏在父级上
- 在不知道深度或父属性的情况下从对象中删除属性
- 刷新父窗口后无法关闭窗口
- 使用正则表达式将输入格式设置为单字符逗号、单字符逗号等
- 重定向到“父窗口”
- 来自文档或下一个静态父级的事件委派
- 对父作用域的指令更新延迟了一步
- 加载两个具有相同父密钥名称的json文件
- 从中关闭子窗口'的父级
- "浮动“;父DIV底部的DIV不起作用.(使用Pos:rel、Bottom 0等)
- 如果我的HTML结构包含另一个父HTML标记或id类等,则需要重定向
- jQuery .prev()的一个类型,不管它的's父等
- 选择最接近的控件元素,不管类型(Input, Select等)进行验证
- 使用jquery获取先前的元素,该元素不是直接的兄弟或父元素等
- 查找相同类型的前一个元素,不管父元素是什么