如何判断我的元素是否需要innerHTML或值

问题描述:

我正在使用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; 
      } 
     } 
    }; 

如果你正在尝试做它在一个通用的方法,你可以做针对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

就像你知道如何在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