sourceIndex и parentElement в Mozilla Opera и IE

bav

Новичок
sourceIndex и parentElement в Mozilla Opera и IE

Столкнулся с проблемой, необходимо узнать sourceIndex и parentElement.id объекта. В IE и Opera это все работает, а вот как я понял мазилка про это не знает или я не прав? Или есть аналоги в ней?
 

BRat

o_0
bav
и где ты такие выкопал вообще )
parentElement = parentNode (это стандарт.)
в Mozill'e sourceIndex нету, это читерство вообще ) Можно сделать так
PHP:
if (typeof HTMLElement.sourceIndex == "undefined") {
HTMLElement.prototype.__defineGetter__("sourceIndex", function () {
allElements = document.getElementsByTagName("*");
for (var i = 0; i < allElements.length; i++) {
if (this == allElements[i]) return i;}
return null;});
}
но ты лучше скажи зачем оно тебе понадобилось
 

bav

Новичок
http://bav.auditory.ru/playlist/ex.php
Вот то что я делаю.
Рекомендую посмотреть через IE или оперу 9 там точно все нормально!
А вот мазилка, косит.
SourceIndex я использую для того, чтобы определить позицию на которую я перетаскиваю контейнер. Я беру sourceIndex перемещенного контейнера и вычитаю из него sourceIndex родительского контейнера. Полученное мне дает позицию перемещенного контейнера в контейнере родители.
А из объекта parentElement я беру id контейнера родителя, что бы знать, какое действие выполнять после перемещения контейнера. (Там в зависимости от id родительского конетйнера либо добавляется, либо удаляется из базы записи. Через Ajax). И все это происходит по отускании кнопки мыши с объекта.
А так как мозила не поддерживает sourceIndex и parentElement, ошибка получается. Действие получается не законченым, т.е. конейнер не фексируется на месте.
 

BRat

o_0
bav
универсальней было бы использовать коллекцию childNodes, но раз уж сделал так, то пускай остается..как сделать кроссбраузерным я написал выше
 

akxxiv

Новичок
Автор оригинала: BRat
bav
и где ты такие выкопал вообще )
parentElement = parentNode (это стандарт.)
в Mozill'e sourceIndex нету, это читерство вообще ) Можно сделать так
PHP:
if (typeof HTMLElement.sourceIndex == "undefined") {
HTMLElement.prototype.__defineGetter__("sourceIndex", function () {
allElements = document.getElementsByTagName("*");
for (var i = 0; i < allElements.length; i++) {
if (this == allElements[i]) return i;}
return null;});
}
но ты лучше скажи зачем оно тебе понадобилось
Вопрос не совсем по теме, что значит __defineGetter__ ? я в справочнике не нашел такого. И еще ИЕ ругается на HTMLElement
 

BRat

o_0
akxxiv
это смотря в каком справочнике искать
http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Guide:Creating_New_Objects:Defining_Getters_and_Setters

Ругается - это код только для Мозиллы, соответсвенно работать будет только в ней. Т.е. нужно проверять браузер юзера, и в зависимости от результата вызывать или не вызывать данный кусок
 

bav

Новичок
Большое спасибо, ты настоящий BRat ))))))))
тока вот с функция соурс индекс я не очень догнал.
Если я ее использую для элемента curTarget, т.е. у меня в IE curTarget.sourceIndex
то здесь я HTMLElement должен заменить на curTarget?
И вторая непонятность allElements это переменная? а ее разве инициализировать не нужно сначала?

if (typeof curTarget.sourceIndex == "undefined") {
curTarget.prototype.__defineGetter__("sourceIndex", function () {
allElements = document.getElementsByTagName("*");
for (var i = 0; i < allElements.length; i++) {
if (this == allElements) return i;}
return null;});
}

-~{}~ 09.12.06 14:43:

я видимо накосил во второй строке функции
вот мазила что пишет
curTarget.prototype has no properties drag_drop.js (line 381)
mouseUp

-~{}~ 09.12.06 14:44:

тока понять не могу что не так
 

BRat

o_0
bav
Стоп. HTMLElement - это класс ВСЕХ html-обьектов документа (td, tr, table и тд и тп). Мы добавляем к прототипу этого класса свойство sourceIndex - таким образом оно появляется у ВСЕХ html-обьектов документа
Если не понятно обьяснил, то бегом в поиск по слову prototype )

allElements = document.getElementsByTagName("*");
Это разве не инициализация?
 

akxxiv

Новичок
Автор оригинала: BRat
bav
Стоп. HTMLElement - это класс ВСЕХ html-обьектов документа (td, tr, table и тд и тп).
В том-то и дело, что ИЕ ругается именно на HTMLElement, мол "HTMLElement - определение отсутствует"
 

bav

Новичок
Так, вот в мозилке заработало, а в IE слетело)))))
пишет HTMLElement is undefinde
 

BRat

o_0
bav
это код только для Мозиллы, соответсвенно работать будет только в ней. Т.е. нужно проверять браузер юзера, и в зависимости от результата вызывать или не вызывать данный кусок
 

BRat

o_0
akxxiv
в IE насколько я знаю нет такого разделения, HTML-обьекты считаются просто экземплярами класса Object. Т.е. это самый близкий аналог HTMLElement
Можно так
PHP:
Object.prototype.newFunc = function() {
   if (typeof this.tagName != "undefined") {
   // код функции 
  }
}
 

bav

Новичок
Точно, поставил проверку браузера, все раьотает!
 

akxxiv

Новичок
Автор оригинала: BRat
PHP:
Object.prototype.newFunc = function() {
   if (typeof this.tagName != "undefined") {
   // код функции 
  }
}
В данном случае ИЕ ругается на строку

obj.newFunc() - объект не поддерживает это св-во или метод

-~{}~ 09.12.06 16:07:

А ФФ даже в этом случае работает замечательно
 

BRat

o_0
akxxiv
код валидный, ищи проблемы у себя

Поправка - ошибся, действительно к html-обьектам св-во не добавляется )
Т.е. html-обьекты не явл-ся экземплярами Object
 
Сверху