2017-08-09 65 views
1

我试图做这样的事情(伪代码)值:的javascript:检查是否元素可以接受

if (element can accept a value) 
    element.value = "my new value"; 
else 
    element.innerHTML = "my new value"; 

所以对于输入,文本区域等将设置value,但股利或跨度将设置为innerHTML

或者我应该简单地设置valueinnerHTML,因为innerHTML对输入元素是无害的吗?

+1

为什么你需要这样做?为什么不知道元素是输入还是内容元素? – Barmar

+1

typeof element.value!='undefined' –

+0

我不认为有一个干净的方法来做到这一点,但你可以尝试这样的事情: 'if(element.tagName =='input'|| element.tagName =='testarea'|| ...)' –

回答

0

正如评论所说,你可以使用

if (element.nodeName == "INPUT" || element.nodeName == "TEXTAREA") {} 

"INPUT""TEXTAREA"是您正在使用的标签,因此无论加那些你想检测你认为合适。

Here is a more in-depth explanation of nodeName


作为一个侧面说明,你可以显著简化这

if (element.nodeName != "DIV") {} 

但这只能做,如果你确定获取传递中的任何元素将是一个类型的输入或的div

0

基本在运营商应该做的伎俩

function hasValue(elem) { 
 
    return 'value' in elem 
 
} 
 

 
console.log('input', hasValue(document.querySelector('#t1'))) 
 
console.log('div', hasValue(document.querySelector('#t2'))) 
 
console.log('select', hasValue(document.createElement('select'))) 
 
console.log('textarea', hasValue(document.createElement('textarea'))) 
 
console.log('h1', hasValue(document.createElement('h1'))) 
 
console.log('span', hasValue(document.createElement('span')))
<input type="text" id="t1" /> 
 
<div id="t2"></div>

0

可以使用attributes属性来获取标签名

function updateElement(elemId) { 
 
    var attr = document.getElementById(elemId).attributes; 
 

 
    if (attr[0].ownerElement.tagName === 'INPUT') { 
 
    document.getElementById(elemId).value = 'adding to value' 
 
    } else { 
 
    document.getElementById(elemId).innerHTML = 'added in inner html' 
 
    } 
 

 
} 
 

 
updateElement('inputElem') 
 
updateElement('divElem')
<input id='inputElem'> 
 
<div id='divElem'></div>

0

您可以使用in运营商,以检查是否任何元素具有value属性 - 看演示如下:

Array.prototype.forEach.call(document.body.children, function(element) { 
 
    if ('value' in element) 
 
    element.value = "form"; 
 
    else 
 
    element.innerHTML = "not form"; 
 
});
<input/> 
 
<div></div> 
 
<textarea></textarea> 
 
<select> 
 
    <option value="not form">Not form</option> 
 
    <option value="form">Form</option> 
 
</select>

如果您选择了jQuery,还有一个更简单的选项:input selelctor - 请参阅以下演示:

$('body').children().each(function() { 
 
    if ($(this).is(':input')) 
 
    $(this).val("form"); 
 
    else 
 
    $(this).html("not form"); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input/> 
 
<div></div> 
 
<textarea></textarea> 
 
<select> 
 
    <option value="not form">Not form</option> 
 
    <option value="form">Form</option> 
 
</select>

相关问题