Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > ближайшие к курсору (выделению) теги


Автор: Frozen_Coyote 23.2.2011, 09:27
Друзья, а подскажите пожалуйста - как узнать ближайшие родительские к выделению (курсору) теги, а так же ближайший дочерний к выделению тег. У меня с commonAncestorContainer какая то свистопляска получается - и с childNodes[0] тоже. Как? smile

спасибо!

Автор: Amphiluke 23.2.2011, 10:09
Цитата(Frozen_Coyote @  23.2.2011,  12:27 Найти цитируемый пост)
У меня с commonAncestorContainer какая то свистопляска получается

Что конкретно не устраивает в commonAncestorContainer?


Цитата(Frozen_Coyote @  23.2.2011,  12:27 Найти цитируемый пост)
и с childNodes[0] тоже

Скорее вам понадобится свойство nextSibling, а не childNodes.
Например, пусть у нас имеется такое выделение:
<p>Some <strong>text</srtong> goes here</p>
Красное — это выделение. Чтобы получить элемент strong как «ближайший дочерний» по отношению к выделенному фрагменту, понадобится примерно такой код:
Код

var sel = window.getSelection();
var rng = sel.getRangeAt(0);
var sc = rng.startContainer;
var child = sc.nextSibling;
alert(child.nodeName);

Автор: Frozen_Coyote 23.2.2011, 10:28
Тут понимаете какая петрушка: что опера что фаер при выделении в iframe допустим ссылки (даже если на экране ссылка выделена четко от начала и до конца от буквы до буквы) могут на проверку показать что границы выделения - не <A> . Да что я голосовлю - посмотрите вот тут - я выложил тестик (http://test.standarta.net/) А мне для своей задачки нужно при получении выделения-линка содрать с него значение href (ну getAttribute - это ясно, дело не в нем). Беда в том что ИЕ четко хватает ссылку, а фаер и оепра и вся эта компания требуют отступ (сейчас немного переписал код - получается наоборот - если выделение внутри ссылки - то получается то что надо, чем больше вылетает за границы ссылки - реально, просто по пикселям приходится выделять от буквы до буквы) то результат - zero

А ваш код что то не работает - не показывает дочку - хоть ты тресни - хоть я и с умышленным запасом делаю выделение чтобы этот A несчастный получить smile

Автор: Amphiluke 23.2.2011, 11:15
Могу предложить модифицировать ваш код в таком духе:
Код

//MOZILLA
if(idoc.getSelection)
{
    var select = iframe.contentWindow.getSelection();
    var range = select.getRangeAt(0);
    var tempel = document.createElement('div');
    var alink = range.commonAncestorContainer;
    while (alink.nodeType != 1) alink = alink.parentNode;
    tempel.appendChild(alink.cloneNode(true));
    var txt = tempel.innerHTML;
}



Цитата(Frozen_Coyote @  23.2.2011,  13:28 Найти цитируемый пост)
А ваш код что то не работает - не показывает дочку - хоть ты тресни - хоть я и с умышленным запасом делаю выделение чтобы этот A несчастный получить

Нормально работает. smile Если, конечно, вы заменили window.getSelection() на iframe.contentWindow.getSelection()

Автор: Frozen_Coyote 23.2.2011, 15:19
О спасибо! Очень помогли! smile

Автор: Frozen_Coyote 24.2.2011, 16:25
Кстати а свойство выделенного в iframe изображения ак то можно получить? я вот смотрю - все таки картинка четко выделяется - не как текст выделение в котором может цеплять разные контейнеры - есть ли предопределенные методы работы с выделенными изображениями, для получения его свойств?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)