Javascript 如何在不同的HTML标记场景中使用jQuery设置值?

Javascript 如何在不同的HTML标记场景中使用jQuery设置值?,javascript,jquery,Javascript,Jquery,有没有一种简单的方法来更改不同HTML结构中的值 在我当前的代码中,我有: <input type="text" class="value" value="5.0"/> 当我尝试执行convert函数并将其返回值分配给其他HTML结构时,会出现问题,如: <td><span class="value">5.0</span></td> <td class="value">5.0</td> 5.0 5 尽管我的

有没有一种简单的方法来更改不同HTML结构中的值

在我当前的代码中,我有:

<input type="text" class="value" value="5.0"/>
当我尝试执行
convert
函数并将其返回值分配给其他HTML结构时,会出现问题,如:

<td><span class="value">5.0</span></td>
<td class="value">5.0</td>
5.0
5
尽管我的值在
span
标记中,但它似乎没有改变。我假定
jQuery.val()
仅用于设置输入字段或属性的值,我可以使用
jQuery.text()
jQuery.html()
来更改
span
标记内的值

我如何编写代码,以便我能够找出我正在更改的元素,并使用适当的setter方法,或者使用一种既适用于
input
HTML标记又适用于
span
HTML标记的方法,甚至适用于
td

加一把小提琴以防万一。。。(所有内容均应更新)


输入元素将具有
.value
属性。这意味着您可以查找该属性并使用它,或者如果它不存在,则使用文本值

$('.value').each(function(){
 //if value is not undefined then use val()
 if(this.value != void 0){
  $(this).val(convert($(this).val(),from,to));
 //otherwise use text
 }else{
  $(this).text(convert($(this).text(),from,to));
 }
});

您可以使用
:input
选择器测试元素是否为输入类型:

$('.value').each(function() {
    var $this = $(this);
    if ($this.is(':input'))
        $this.val(convert($this.val(), from, to));
    else 
        $this.text(convert($this.text(), from, to));
});
在后台,jQuery基本上用一个小正则表达式测试元素的节点名,看看它是否是输入元素,所以它应该非常快:

var rinputs = /^(?:input|select|textarea|button)$/i;
...
return rinputs.test(el.nodeName);
示例(修改代码以在此处工作):

$('.value')。每个(函数(){
var$this=$(this);
if($this.is(':input'))
$this.val($this.val()+“-changed!”);
其他的
$this.text($this.text()+“-changed!”);
});



初始值2可以让jQuery在输入值和非输入值之间进行选择

$('.value:input').each(function(){
    $(this).val(convert($(this).val(), from, to));
});
$('.value').not(':input').each(function(){
    $(this).text(convert($(this).text(), from, to));
});

您的已更新。

如果
$(this).is('input')
并且它可以有value属性,但它只是没有定义或提供?示例:
@DmytroTsiniavskyi-
是一个(并选择)元素。即使未在属性中设置,它仍然存在<代码>$('input')[0]。值!=void 0
对于您的示例来说是
true
。由于某些原因,当我使用此函数时,会得到空字符串<代码>警报($(this.val())在else中时不返回任何内容branch@Math,我不知道你在说什么mean@Dennis我的错误;我问你是否关心
元素,但是
:input
也包括这些元素。直到@Dennis
$this.val()
else
分支中应为空,bc元素不是输入。您需要
$this.text()
@Dennis:fiddle的更新:(仅供参考:
元素不能单独存在,这就是我添加其余表元素的原因。否则脚本无法工作。)
$('.value:input').each(function(){
    $(this).val(convert($(this).val(), from, to));
});
$('.value').not(':input').each(function(){
    $(this).text(convert($(this).text(), from, to));
});