replaceWith внутри each цикла не работает с моим тегом
Здравствуйте, у меня есть функция, которая принимает текст с моим собственным тегом <link title="title" src="src"> и конвертирует его в <a href="src">title</a>:
//<link src="" title=""> -> <a href="">title</a> function ProceedLinkTag(text) { var items = text.filter("link"); items.each(function () { var currentElement = $(this); var title = currentElement.attr("title"); var source = currentElement.attr("src"); var newElement = $("<a>" + title +"</a>"); newElement.attr("href", source); $(this).replaceWith(newElement); //it don't work alert($(this)[0].tagName); //LINK }); Вроде никаких ошибок не выдает, прохожусь отладчиком - вроде и тег мой определяет(не смотря на отсутствие закрывающего тега) и атрибуты, но заменять не хочет. Использую примерно так: alert(ProceedLinkTag($("<link src='http://lenta.ru/' title='title'>"))); Заранее спасибо! |
Для начала вставь полученные элементы куда нибудь (только не говори что ты пытаешься заменить все линки в хеде на ссылки) - и увидишь ссылки.
А то что ты проверяешь стала ли Link ссылкой - дык, это javascript а не алхимия. Линк линком и остался, кроме того ты создал новый элемент - ссылку и просто заменил одно другим. Так с чего бы $(this)[0].tagName вдруг должен стать равен A ? |
Но объясните мне, я не понимаю.
Почему этот код $(this).replaceWith(newElement); не заменяет элемент на нужный мне? text - грубо говоря тот же html код со своими нодами и так далее. Я смотрел в справке и там куча примеров типа: $( "button" ).click(function() { $( this ).replaceWith( "<div>" + $( this ).text() + "</div>" ); }); Единственное, что надо заменять не на элемент, а на его html код(но это все равно не сделало код работоспособным). |
Во первых скопировал твой код с небольшими изменениями (вставил линк в боди и передал его в твою функцию) - линк заменился на ссылку. Ты этого хотел? Если да то мои поздравления, все получилось.
$(this) в твоем коде - обращение к линк. после метода replaceWith он не переродился в ссылку, так вот обращайся к ссылке alert(newElement[0].tagName); Грубо говоря чтоб яснее понять - открываем консоль записываем в переменную какой нибудь элемент. Удаляем этот элемент. Вызываем переменную - вуаля! В переменной сохранилась ссылка на элемент(не сам элемент! а ссылка на него.) То же самое и ты видишь когда пытаешься вызвать $(this)[0].tagName - $(this) все еще линк , он не стал ссылкой |
Да вы были правы ошибка была в том, что text не был частью документа.
Спасибо за помощь! |
Часовой пояс GMT +3, время: 20:22. |