Я нашел список элементов, которые (согласно спецификации) допускают атрибут src
:
audio, embed, iframe, img, input, script, source, track, video
Так что это работает для проверки по имени:
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();
}