2015-02-08 80 views
2

我正在使用JavaScript在我的網站上運行一些AB測試。我可以用element.innerHTML = "Text that I want"更改<button>的文字,但使用相同的策略我無法更改<input type="submit">的文字。相反,我可以使用element.value = "Text that I want"更改提交按鈕的值,但不能以這種方式更改<button>的文本。如何判斷我的元素是否需要innerHTML或值

所以我的問題是,我怎麼能知道哪個函數需要在特定元素上使用,以便我可以創建一個算法來處理每種類型的元素?

總之:如何知道是以編程方式使用element.innerHTML還是element.value

注意: jQuery是不允許的。

示例 - 以下代碼將類名稱作爲輸入並更改整個頁面中的元素。有時<input>可能具有識別類別,但有時可能是<div>,<button><p>

var execute = function(experimentName, variation){ 
     var elements = document.getElementsByClassName(experimentName); 
     for (var j = 0; j < elements.length; j++) { 
      if (typeof(variation) == "function") 
      { 
       variation.call(elements[j]); 
      } 
      else 
      { 
       elements[j].value = variation; 
       //elements[j].innerHTML = variation; 
      } 
     } 
    }; 

回答

3

如果你正在嘗試做它在一個通用的方法,你可以做針對instanceof檢查輸入元素的interface class

if(element instanceof HTMLInputElement){ 
    element.value = "foo"; 
} else { 
    element.innerHTML = "foo"; 
} 
+1

不錯。 http://jsfiddle.net/qqvpy1se/1/ – 2015-02-08 18:58:36

+0

偉大的方法。你把它帶到下一個層次。 – roshan 2015-02-08 19:01:20

2

就像你知道如何在HTML中使用那個元素一樣。

innerHTML設置元素的內容; value設置元素的value=""屬性。

+0

我怎樣才能改變一個'submit'和的'value'的'一個'button'的innerHTML'具有相同的代碼? – 2015-02-08 18:34:10

+0

只有少數幾個使用'value'的元素,所以你可以創建一個列表併爲它們設置一個例外。 – MightyPork 2015-02-08 18:38:13

+0

@MightyPork夠公平的,我認爲可能有更優雅的方式。 – 2015-02-08 18:40:07

相關問題