свойства и методы DIV

 
0
 
JavaScript
ava
Зэц | 14.12.2004, 12:30
Хочу задать несколько глупых вопросов...
Допустим у меня есть

<div id='Test'>Test</div>

В процессе я текст внутрь включенный менял, добавлял, редактировал... Но вот мне в некоторый момент понадобыилось узнать:
Цвет какой-нить определенной буковки из этого div'a, ее шрифт, высота и ширина в пикселях... Как это сделать???
Еще вопрос туда же... Допустим я кликнул мышкой в этот же div... Мне реально узнать, на какую а буковку попал?? Если при этом я не выделял ни каких буковок, то есть варианты работы с выделенной областью здесь не подойдут...

Помощь узнать желательно с примерами))
Заранее спасибо
Kommentare (3)
ava
Sardar | 14.12.2004, 13:22 #
Всё работает не совсем как ты это себе представляешь smile
Слой содержит любые HTML элементы и отывки текста между ними как спосок нод в своём дереве(и текст и элементы наследуют интерфейс Nodе), это модель документа W3C DOM.
Узнать на какой букве кликлнули нельзя, т.к. буква это часть текста(событие для всего текста) либо находится внутри дочернего элемента(событие для всего элемента). Тогда можно каждую букву обернуть в некоторый элемент(SPAN), т.е. каждая буква станет полноценной нодой в дереве. Клик по букве может ловить как сама буква, так и слой её содержащий(и выше по дереву), ссылка на букву будет лежать в поле event.target(согласно модели W3C DOM) и event.srcElement(согласно привычке ИЕ делать всё не как у людей).
<div id="test">Привет всем</div>
....
var d=document.getElementById("test");
var t=d.firstChild.nodeValue; //дпустим что в слое лежит только текст, обернём каждую букву в SPAN
var nd=document.createElement("DIV"); //создадим новый слой
for(var i=0; i<t.length; i++) {
 var sp=document.createElement("SPAN");
 sp.appendChild(document.createTextNode(t.charAt(i))); //можно установить события для каждой букбы
 nd.appendChild(sp);
}
nd.addEventListener("click", click_handler, false); //читай топик "всё о событиях"
d.parentNode.replaceChild(nd, d); //заменим слой на только что созданный

function click_handler(e) {
 alert("Кликнули по букве: " + e.target.innerHTML);
 e.target.style.color="yellow"; //далее можем делать с буквой
 e.target.style.backgroundColor="black"; //всё что угодно
 this.style.backgroundColor="blue"; //со слоем тоже можем делать всё что захотим
}


Код запускай в Мозилле или Опере, ИЕ как всегда отходит от стандартов. Как его правильно фиксить читай в топике "всё о событиях".
ava
Зэц | 14.12.2004, 18:55 #
Спасибо...) Вроде все понятно, надо только это опробовать... Я думаю все же можно выловить конкретную буковку. Каждую буковку текста делать полноценной нодой все же не разумно, так как текст может быть очень большой... А вот однотипные фрагменты текста с общим стилем вполне можно... При клике на такой кусок, просто разбиваем уже только его, и вызываем событие клика уже самостоятельно и кода... Такое прокатит???
ava
Sardar | 14.12.2004, 20:05 #
Цитата
Каждую буковку текста делать полноценной нодой все же не разумно

Это еще почему? smile Прошли те времена когда на бразуер отводилось не более 6-8Мб памяти, теперь любая бродилка хавает 30-60Мб, зачем на нодах экономить? И я не представляю ситуацию когда нужно ловить клики по каждым буквам огромного текста... что это будет?

Если нужны опредеёллные буквы, то можешь заранее обернуть их в SPAN'ы и работать только с ними.

А вообще поясни задачу получше.
Registrieren Sie sich oder melden Sie sich an, um schreiben zu können.
Unternehmen des Tages
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Mitwirkende
  Sardar   Зэц
advanced
Absenden