2014-07-16 126 views
1

我一个。听类添加到我的网页上各种元素的含量,可能是一个按钮,可以输入,DIV,跨度等更改输入/ DIV/SPAN等

$('.listen').on('click', this._init.bind(this)); 

在我希望替换被点击元素中的文字的方法。

p._init = function(e){ 
    $(e.currentTarget).val('new data'); 
}; 

上面的工作为输入元素,但不是像divs的东西。有没有办法改变任何类型的元素的数据,或者我将不得不使用开关来测试变化?

+0

一个DIV不具有价值,所以它永远不会在一个DIV工作。 – adeneo

+0

是的 - 这就是我要求的,我知道val不会在div上工作 – panthro

+0

'.text()'将在div上工作。要小心,如果你有一个包含DOM元素的'div',函数可以覆盖它' –

回答

0

对于div的输入是val()而东西是text()。

如果你想要做一个单一事件的一切,你可以这样做:

$('.listen').on(... 
{ 
    if($(this).is('input')) 
    { 
     use val() 
    } 
    else 
    { 
     use text() 
    } 
} 
+0

那么我需要一个switch语句来测试输入类型吗? – panthro

+0

就是这样的,是的。我会使用jQuery的.is() – Piwwoli

1

你可以得到一点点花哨,并检查元素有一个value财产,并根据变化的方法之一是,像

p._init = function(e){ 
    $(e.currentTarget)['value' in e.currentTarget ? 'val' : 'text']('new data'); 
}; 

FIDDLE

除非你增加价值属性的元素不NATIV具有价值属性,应该有效。

+0

这只适用于在输入中设置了值。 – panthro

+0

@panthro - 适用于我的任何一种方式 - > http://jsfiddle.net/adeneo/GTxA7/1/,它应该,因为输入元素默认具有值属性 – adeneo

+0

进一步的测试显示这更清晰,一些元素具有价值属性,其他人则不 - > http://jsfiddle.net/adeneo/A6p7p/ – adeneo

0

试试这个DEMO

$(document).ready(function(){ 

    _init = function(e){ 
     if(e.target.nodeName=='SPAN'||e.target.nodeName=='DIV') 
      $(this).text('new data'); 
     else if(e.target.nodeName=='INPUT') 
      $(this).val('new data'); 
     }; 
    $('.listen').on('click', _init); 

});