Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   добавление ссылок к картинкам (https://javascript.ru/forum/misc/1699-dobavlenie-ssylok-k-kartinkam.html)

Gekt0r 04.09.2008 14:46

добавление ссылок к картинкам
 
Всем привет, однажды уже обращался с похожим вопросом.. Тогда мне показалось, что нашел решение, но оно оказалось очень глючным)

Есть документ, с картинками. Мне надо сделать часть картинок ссылками. Чтобы был не просто <img src="....">, а <a href = "..."><img src="..."></a>

можно ли это сделать? Если да, то как?
Спасибо)

ZoNT 04.09.2008 15:11

поместить картинки внутрь тега <a>

Gekt0r 04.09.2008 15:12

иии как это сделать?)
я не нахожу метода DOM, который бы это позволил:(
а с innerHTML не получится с тегом <img>

Snipe 04.09.2008 15:40

Цитата:

Сообщение от Gekt0r (Сообщение 5340)
иии как это сделать?)
я не нахожу метода DOM, который бы это позволил:(

appendChild()

Gekt0r 04.09.2008 16:06

Snipe, по-твоему, можно добавить дочерний элемент-ссылку к картинке?
У меня не получилось..
Вот код (упрощенный):

function wrapImages () {
var thisImage; //содержит картинку

var elem = document.createElement("a");
elem.href="http//www.mail.ru";
thisImg.appendChild(elem);
}

на этот код браузер ругается:(

Snipe 04.09.2008 16:11

function wrapImages () {
var thisImage; //содержит картинку
 
var elem = document.createElement("a");
elem.href="http//www.mail.ru";
elem.appendChild(thisImage);
}

Но не проверял.

Snipe 04.09.2008 16:20

Либо innerHTML родительского для всех картинок блока и replace'ом по RegExp'у.

ZoNT 04.09.2008 17:22

ну вообще-то есть такая штука как parentNode :)
var parent = img.parentNode;
parent.removeChild(img);
var elem = document.createElement("a");
elem.href="http//www.mail.ru";
elem.appendChild(img);
parent.appendChild(elem);

Snipe 04.09.2008 17:45

Все верно, упустил =)
тогда, по идее можно картинки не удалять (parent.removeChild(img); ), если верить одному мануалу:
"Метод appendChild() объекта Node добавляет узел newChild в список дочерних узлов данного узла. Если узел newChild уже включен в состав дерева, то перед операцией включения он удаляется."

ZoNT 04.09.2008 18:20

а если ему не верить?

ZoNT 04.09.2008 18:25

Протетсть под всеми браузерами, нам потом расскажешь...

Octane 04.09.2008 22:39

appendChild переносит (перемещает) уже существующий в дереве DOM узел. Работает везде и во всех браузерах.

ZoNT 04.09.2008 22:50

вот и отлично!
Доверяй, но проверяй (мало ли как там в рекомендациях написано, браузеры делают, бывает, по-совему).

Gekt0r 05.09.2008 13:35

Цитата:

Сообщение от Snipe (Сообщение 5346)
Либо innerHTML родительского для всех картинок блока и replace'ом по RegExp'у.

так можно, но уж слишком геморно получается в итоге, работать со строками, много всего надо учитывать.. Я хотел через DOM, так проще и эффективнее, но не совсем понимал, как это сделать


Цитата:

Сообщение от ZoNT (Сообщение 5355)
ну вообще-то есть такая штука как parentNode :)
var parent = img.parentNode;
parent.removeChild(img);
var elem = document.createElement("a");
elem.href="http//www.mail.ru";
elem.appendChild(img);
parent.appendChild(elem);

Вот это именно то, что надо, спасибо огромное!

Octane 05.09.2008 14:05

Можно немного проще сделать:
var elem = document.createElement('a');
elem.href = 'url';
img.parentNode.insertBefore(elem, img);
elem.appendChild(img);

ZoNT 05.09.2008 14:10

Так даже лучше, так как сокращение кода - это увеличение скорости работы...

Gekt0r 05.09.2008 15:06

Цитата:

Сообщение от Octane (Сообщение 5386)
Можно немного проще сделать:
var elem = document.createElement('a');
elem.href = 'url';
img.parentNode.insertBefore(elem, img);
elem.appendChild(img);

да, ощутимо быстрее, спасибо!
Плюс предыдущая версия почему-то меняла порядок картинок в случае, Если у родительского элемента было несколько детей-картинок.
Эта работает еще лучше)


Часовой пояс GMT +3, время: 15:28.