Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.09.2014, 07:50
Интересующийся
Отправить личное сообщение для ruzik Посмотреть профиль Найти все сообщения от ruzik
 
Регистрация: 13.07.2013
Сообщений: 20

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'>")));

Заранее спасибо!
Ответить с цитированием
  #2 (permalink)  
Старый 22.09.2014, 13:43
Профессор
Отправить личное сообщение для krasovsky Посмотреть профиль Найти все сообщения от krasovsky
 
Регистрация: 21.12.2012
Сообщений: 869

Для начала вставь полученные элементы куда нибудь (только не говори что ты пытаешься заменить все линки в хеде на ссылки) - и увидишь ссылки.
А то что ты проверяешь стала ли Link ссылкой - дык, это javascript а не алхимия. Линк линком и остался, кроме того ты создал новый элемент - ссылку и просто заменил одно другим. Так с чего бы $(this)[0].tagName вдруг должен стать равен A ?

Последний раз редактировалось krasovsky, 22.09.2014 в 14:41.
Ответить с цитированием
  #3 (permalink)  
Старый 22.09.2014, 17:37
Интересующийся
Отправить личное сообщение для ruzik Посмотреть профиль Найти все сообщения от ruzik
 
Регистрация: 13.07.2013
Сообщений: 20

Но объясните мне, я не понимаю.
Почему этот код
$(this).replaceWith(newElement);

не заменяет элемент на нужный мне?
text - грубо говоря тот же html код со своими нодами и так далее.
Я смотрел в справке и там куча примеров типа:
$( "button" ).click(function() {
  $( this ).replaceWith( "<div>" + $( this ).text() + "</div>" );
});

Единственное, что надо заменять не на элемент, а на его html код(но это все равно не сделало код работоспособным).
Ответить с цитированием
  #4 (permalink)  
Старый 23.09.2014, 08:36
Профессор
Отправить личное сообщение для krasovsky Посмотреть профиль Найти все сообщения от krasovsky
 
Регистрация: 21.12.2012
Сообщений: 869

Во первых скопировал твой код с небольшими изменениями (вставил линк в боди и передал его в твою функцию) - линк заменился на ссылку. Ты этого хотел? Если да то мои поздравления, все получилось.
$(this) в твоем коде - обращение к линк. после метода replaceWith он не переродился в ссылку, так вот обращайся к ссылке alert(newElement[0].tagName);

Грубо говоря чтоб яснее понять - открываем консоль записываем в переменную какой нибудь элемент. Удаляем этот элемент. Вызываем переменную - вуаля! В переменной сохранилась ссылка на элемент(не сам элемент! а ссылка на него.) То же самое и ты видишь когда пытаешься вызвать $(this)[0].tagName - $(this) все еще линк , он не стал ссылкой

Последний раз редактировалось krasovsky, 23.09.2014 в 08:45.
Ответить с цитированием
  #5 (permalink)  
Старый 23.09.2014, 12:18
Интересующийся
Отправить личное сообщение для ruzik Посмотреть профиль Найти все сообщения от ruzik
 
Регистрация: 13.07.2013
Сообщений: 20

Да вы были правы ошибка была в том, что text не был частью документа.
Спасибо за помощь!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает setInterval внутри jQuery ready в Chrome Universe jQuery 6 14.08.2013 18:03
обичная функця внутри: $(document).ready(); не работает dadli Общие вопросы Javascript 8 20.05.2012 22:18
Почему не работает тег <script> внутри тега <div>? serviom Общие вопросы Javascript 10 26.11.2011 01:24
Из-за цикла не работает анимация Isaac Общие вопросы Javascript 28 07.08.2011 12:17
Не работает код внутри циклов DZHETIGAPA Events/DOM/Window 1 21.06.2011 01:03