У меня есть очень простой кусок кода, который я сделал для чередования чатов, который позволяет мне видеть изображение, опубликованное кем-то прямо в чате.Я не делаю экстремальной проверки, я просто хочу преобразовать любую ссылку на изображение в тег <img>
.
(function() {
'use strict';
$('.tw-flex-grow-1').on("DOMSubtreeModified",function(){
$(".link-fragment").each(function(){
if (($(this).text().indexOf(".jpg") > 0 ) || (($(this).text().indexOf(".png") > 0 )) || (($(this).text().indexOf(".gif") > 0 ))|| (($(this).text().indexOf(".jpeg") > 0 ))){
$(this).html("<img src='" + $(this).text() + "' width='200px'/>");
}
});
});
}) ();
Я обнаружил, что DomSubTreemodified может отслеживать измененияв дел.Но моя проблема в том, что это медленно.Это сделает свою работу, но это действительно медленно, и я не знаю, почему именно.И я знаю, что с большим количеством сообщений это может быть медленно из-за «.Each», но это я решу позже, это медленно только с одним сообщением.
Это неправильный подход?Как можно ускорить этот триггер, модифицированный domsubtree?
EDIT
Следуя предложению в комментариях:
(function() {
'use strict';
var targetNode = document.getElementsByClassName('tw-flex-grow-1')[0];
// Options for the observer (which mutations to observe)
var config = { attributes: true, childList: true, subtree: true };
// Callback function to execute when mutations are observed
var callback = function(mutationsList, observer) {
for(var mutation of mutationsList) {
alert("test");
if (mutation.type == 'childList') {
$(".link-fragment").each(function(){
if (($(this).text().indexOf(".jpg") > 0 ) || (($(this).text().indexOf(".png") > 0 )) || (($(this).text().indexOf(".gif") > 0 ))|| (($(this).text().indexOf(".jpeg") > 0 ))){
$(this).html("<img src='" + $(this).text() + "' width='200px'/>");
}
});
}
else if (mutation.type == 'attributes') {
console.log('The ' + mutation.attributeName + ' attribute was modified.');
}
}
};
var observer = new MutationObserver(callback);
// Start observing the target node for configured mutations
observer.observe(targetNode, config);
})();