var html = someHTML; //passed in html, maybe $('textarea#id').val();? I don't understand what you mean by 'passed in html'
var container = document.createElement('div');
container.innerHTML = html;
$(container).find('img,embed,head,script,style').remove();
//or
$(container).find('[src]').remove();
var target = someTarget; //place to put parsed html
$(container).appendTo($(target));
EDITAR
funcionamiento probado
removeExt = function(cleanMe) {
var toScrutinize = $(cleanMe).find('*'); //get ALL elements
$.each(toScrutinize, function() {
var attr = $(this)[0].attributes; //get all the attributes
var that = $(this);
$.each(attr, function(){
if ($(that).attr(this.nodeName).match(/^http/)) {//if the attribute value links externally
$(that).remove(); //...take it out
}
})
})
$('script').remove(); //also take out any inline scripts
}
var html = someHTML;
var container = document.createElement('div');
container.innerHTML = html;
removeExt($(container));
var target = someTarget;
$(container).appendTo($(target));
Esto coincidirá src, href, enlace, los datos-foo, lo que sea ... No hay manera de ligar el exterior. http y https son ambos coincidentes. los scripts en línea son asesinados. Si todavía es una preocupación de seguridad, entonces quizás esto deba hacerse en el lado del servidor u ofusque su JS.
He resuelto el problema ... puede adaptar esto para reemplazar el src por cualquier etiqueta http://stackoverflow.com/questions/6671461/replace-img-elements-src-attribute-in-regex – samccone
Como no lo hago controle el HTML fuente, y hay demasiados trucos difíciles, no puedo aceptar una respuesta de expresiones regulares. Lo siento. Además, tiene sentido que las secuencias de comandos no se ejecuten, ya que pueden decidir cargar recursos externos por su cuenta. –