2013-05-21 91 views
1

我试图设置一个元素的值,如果该值无法设置(因为它不是输入元素,如输入,选择或textarea),那么它必须是一个可以填充文本的元素()将值或文本设置为未知元素

var someval = "My Value"; 
//Try and set value 
$("#some_el").val(someval); 
// If it couldn't set 
$("#some_el").text(someval); 

类似的东西。有没有一种方法可以让我在jQuery中做到这一点?

感谢

回答

2

您可以链的方法,jQuery的检查它的内部,这样的方法之一将工作:

$("#some_el").val(someval).text(someval); 

http://jsfiddle.net/3Btty/

另一种选择是检查选择的DOM元素是否具有具体财产如valuetextContent或不是,这允许您使用textval方法作为吸气剂:

var $elem = $('#some_el'), 
    method = 'value' in $elem[0] ? 'val' : 'text'; 

var value = $elem[method](); 

请注意,此方法仅适用于一个选定元素,对于多于一个选定元素,您可以使用.each()方法。

http://jsfiddle.net/hTUnS/

+0

+1优秀!! –

+0

只是一个快速的附加问题,我可能会为此付出代价,但它是否也可以用作吸气剂?我想我会发现,但也许对其他人看? –

+0

@FelipeTadeo作为getter,它会抛出一个错误,因为返回的字符串没有'val'或'text'方法。 – undefined

0
var someval = "My Value"; 

if($('#some_el').is(':input')){ 
    $("#some_el").val(someval); 
}else{ 
    $("#some_el").text(someval); 
} 

编辑

:input选择不能利用querySelectorAll的......这样的表现不会很明显。然而,这就是说,你使用的是一个id,所以不会有多于一个你正在比较的元素。如果它超过1,我建议过滤它。通常,我不建议使用非规格选择器,但在这里,没关系。

0
var someval = "My Value"; 
$(".someval").each(function() { 
    if (typeof $(this)[0].value !== 'undefined') { 
     $(this).val(someval); 
    } else { 
     $(this).text(someval); 
    } 
}); 

,如果它不能被设置值,则属性的值是未定义的。