2014-07-16 57 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); 

});