Javascript 检查元素是否合法支持src属性或innerHTML

Javascript 检查元素是否合法支持src属性或innerHTML,javascript,jquery,innerhtml,nodes,Javascript,Jquery,Innerhtml,Nodes,有没有办法检查一个元素是否可以显示innerHTML或$.html()(像有单独结束标记的元素),或者是一个元素,根据html规范,它应该有一个src属性,比如inner,这是完全有效的。我想你可以这样做 if (typeof element.src !== 'undefined') if (element.innerHTML ...) 不完全可靠,因为任何元素都可以添加这些属性(JSON) (感谢您提供的修复类型,小偷)不幸的是,没有一种简单的方法可以做到这一点,因为在Javascript中

有没有办法检查一个元素是否可以显示
innerHTML
$.html()
(像有单独结束标记的元素),或者是一个元素,根据html规范,它应该有一个
src
属性,比如
inner
,这是完全有效的。

我想你可以这样做

if (typeof element.src !== 'undefined')
if (element.innerHTML ...)
不完全可靠,因为任何元素都可以添加这些属性(JSON)


(感谢您提供的修复类型,小偷)

不幸的是,没有一种简单的方法可以做到这一点,因为在Javascript中,任何元素都可以具有这些属性。 此外,几乎所有的HTML元素,包括

var div=document.getElementById(“anElementWithInnerHTML”);
log(div.innerHTML)//输出“”
console.log(div.src)//输出未定义
var img=document.getElementById(“anElementWithInnerSRC”);
log(img.innerHTML)//输出“”(对吗?)
console.log(img.src)//输出“”
我找到了:

因此,这可以通过名称进行检查:

 audio, embed, iframe, img, input, script, source, track, video
这更安全:

function getContent(elem) {
    // @param  elem  is a selected element like $(this)
    // returns empty string if attr() and html() are both are falsey
    return elem.attr('src') || elem.html(); 
}

src
属性与
innerHTML
有什么关系?任何东西都可以有
src
属性。或者一个
innerHTML
属性,尽管
innerHTML
可能不会达到您的期望。@AnthonyGrist,不幸的是,这里不太清楚要问什么问题。我认为这个问题的答案是:从技术上讲,任何元素都可以有任何属性。您不能返回一个动态函数,说明
div
不能有
src
;一个
div
可以有一个
src
,它不会做任何事情。除非你硬编码它(例如
if(elem='iframe'| elem='img'|等)
)或者使用一个查找表,否则这是不可能的。
element.src!==未定义的
typeof element.src!='未定义“
”-但您无法将属性本身与字符串“未定义”进行比较!很高兴你能按你想要的方式工作。感谢您发布您的解决方案!
function srcAllowed(tag) {
    if ( !tag ) { return false; }
    var tags = ['audio','embed','iframe','img','input','script','source','track','video'];
    return 0 <= $.inArray(tag.toLowerCase(), tags); // boolean
}
function getContent(elem) {
    // @param  elem  is a selected element like $(this)
    // returns empty string if attr() and html() are both are falsey
    return elem.attr('src') || elem.html(); 
}
function getContentSafer(elem) {
    // @param  elem  is a selected element like $(this)
    // returns empty string if attr() and html() are both are falsey
    return srcAllowed(elem.prop('tagName')) ? (elem.attr('src') || elem.html()) : elem.html(); 
}