如何从具有相同类或其他属性的众多元素中单独定位元素。我不能在每个元素上添加不同的类,所以我需要在我工作时定位每个元素。
到目前为止,我已经尝试了这一点,但它使用input:text
定位所有元素,因为我错误地将每个单独元素作为目标。
var selector = $('input:radio').prop("checked", true);
var element = $ ('input:text');
$(selector).on('change', function( event ) {
if(this){
$(element).prop('disabled', true);
alert('disable only this element when radio is selected');
}
else{
alert('others input:text not disabled');
$('input:text').prop("disabled", false);
}
})
答案 0 :(得分:3)
通过使用DOM导航方法,您可以非常轻松地完成。只需使用:
var selector = $('input:radio').prop("checked", true);
var element = $ ('input:text');
$(selector).on('change', function( event ) {
var el = $(this).closest('.input-group').find('input:text');
element.prop('disabled', function(){
return !el.is(this);
})
});
小提琴:http://jsfiddle.net/D2RLR/5874/
对于动态输入,您需要使用事件委派(阅读更多here):
//document should be closest static element
$(document).on('change', 'input:radio', function(){
var el = $(this).closest('.input-group').find('input:text');
$('input:text').prop('disabled', function(){
return !el.is(this);
})
})
答案 1 :(得分:1)
为什么不简化?
$('input:radio').on('change', function (event) {
$('input[type=text]').prop('disabled', false);
$(this).parent().next('input[type=text]').prop('disabled', 'false');
})
答案 2 :(得分:1)
我并不完全明白您尝试做什么,但您可以使用$(this)来定位触发事件的元素,而不是尝试使用选择器。
我觉得这样的事情就是你想要的:
$(selector).on('change', function( event ) {
$("input:text").prop("disabled", true);
$(this).parent().siblings("input:text").prop("disabled", false);
})
它禁用所有输入:文本,然后启用其单选按钮被选中的文本。
答案 3 :(得分:1)
试试这个:
$(selector).on('change', function( event ) {
$('input:text').prop("disabled", false);
$(this).closest('.input-group').find(element).prop('disabled', true);
})
答案 4 :(得分:1)
正如其他人所说,你不清楚自己要做什么,或者你的问题有多普遍。如果与您的选择器匹配的元素具有完全相同的属性(包括类),您可能需要基于它们所嵌入的上下文,或者作为最后一个资源,您可能能够基于这些元素的顺序。
背景信息:如果您正在寻找" p.many_like_me" ,你知道你想要匹配的元素是在#parent_id中,你只需要将你的选择器精炼为" #parent_id p.many_like_me"
订单:如果您知道您正在寻找与您的选择器匹配的DOM上的第三个元素,您可以使用get()来选择它:$(" p.many_like_me" ).get(2)(get取一个从零开始的索引)。
如果您需要根据附近或某种相关元素触发的事件选择它们,那么此处给出的其他一些答案都可以。