Cum să schimbi atributele HTML într-un șir brut cu Jquery sau Javascript?
Vreau să iau mai multe etichete de ancoră și să mă asigur că toate se deschid într-un tab nou.
Știu că ar trebui să fac ceva de genul acesta $ ('a').attr('target', '_blank');, dar problema este că HTML-ul pe care încerc să-l modific se află într-o variabilă de tip șir de caractere.
Vezi exemplul:
Am un teanc de HTML brut într-un șir ca acesta:
var rawHTML = 'Hello there, <a href="http://www.google.com">this</a> is a link.'
Cum pot să convertesc asta să fie ceva de genul acesta:
processedHTML = 'Hello there, <a href="http://www.google.com" target="_blank">this</a> is a link.'
Răspuns #1
Folosind jQuery poți adăuga șirul la un element din afara DOM-ului
Poți apoi folosi metodele jQuery pe acest element nou pentru a modifica HTML-ul și apoi a returna șirul modificat:
var rawHTML = 'Hello there, <a href="http://www.google.com">this</a> is a link.';
// create element and set string as it's content
var $div = $('<div>').html(rawHTML);
// modify attributes
$div.find('a').attr('target', '_blank');
// return modified content to string
var processedHTML = $div.html();
Răspunsul #2
În JavaScript pur, putem face acest lucru folosind metodele document.createElement, Element.getElementsByTagName și Element.setAttribute, precum și proprietatea getter & setter Element.innerHTML.
Rețineți că Element.getElementsByTagName returnează un HTMLCollection live, motiv pentru care putem instanția obiectul links înainte de a insera șirul html. Pentru a itera peste colecție, invocăm o metodă de array cu colecția ca context this.
Acest lucru reduce o parte din suprasarcina jQuery.
function blankify (html) {
var root = document.createElement('span'),
links = root.getElementsByTagName('a');
root.innerHTML = html;
Array.prototype.forEach.call(links, function (e) {
e.setAttribute('target', '_blank');
});
return root.innerHTML;
}
console.log(blankify('Hello there, <a href="http://www.google.com">this</a> is a link.'));Și doar pentru că, iată o metodă jQuery destul de flexibilă. Funcționează pe DOM și poate fi înlănțuită.
jQuery.prototype.blankify = function () {
return this.find('a').attr('target', '_blank'), this;
};
console.log($('<span/>', {
html: 'Hello there, <a href="http://www.google.com">this</a> is a link.'
}).blankify().html());<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>