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

How to tell whether my element needs innerHTML or value

我正在使用 JavaScript 到 运行 我网站上的一些 AB 测试。我可以使用 element.innerHTML = "Text that I want" 更改 <button> 中的文本,但使用相同的策略我无法更改 <input type="submit"> 中的文本。

相反,我可以使用 element.value = "Text that I want" 更改提交按钮的值,但不能以这种方式更改 <button> 的文本。

所以我的问题是,我如何知道需要在特定元素上使用哪个函数,以便我可以创建处理每种元素类型的算法?

简而言之:我如何知道以编程方式使用 element.innerHTML 还是 element.value

注意: jQuery 是不允许的。

示例 - 下面是一些代码,将 class 名称作为输入并更改整个页面的元素。有时 <input> 可能具有标识 class,但有时它可能是 <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;
            }
        }
    };

与您首先知道如何在 HTML 中使用该元素的方式相同。

innerHTML 设置元素的内容; value 设置元素的 value="" 属性。

如果您尝试以通用方式执行此操作,您可以对输入元素的 interface class 进行 instanceof 检查:

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