Позиция Div/CSS не обновляется после манипулирования javascript

Я хочу переместить div, который обычно плавает с правой стороны, в абсолютную позицию (определяемую js), а затем вернуться в исходное положение.

Первая часть уже работает и зависит от настройки стиля. теги для объекта.. что-то вроде

mytarget.style.position="absolute";
mytarget.style.top="50px";

Чтобы переместить его обратно, я хотел бы просто назначить стандартный класс элементу, который также будет содержать информацию о позиционировании.

Как ни странно, будет работать все, кроме репозиционирования. Вот соответствующий код:

var mytarget= document.getElementById(titlebarid);
var newclass=tabstyleclasses[titlebarid][ismaxedtab[titlebarid]];



mytarget.className= newclass ;

Отлаживать:

 alert ("wanting to set : " + newclass  )    ;

Это выводит правильное значение. (adfieldtitlesm)

alert ("my target is " +mytarget.id);

Работает также.

alert ("new class is " + mytarget.className );

Выдает также правильное значение. (adfieldtitlesm)

alert ("new position is " + mytarget.style.position );

Выдает абсолютный (как ранее устанавливал JS при перемещении mytarget), должно быть исправлено

Это класс CSS:

.adfieldtitlesm
 {
  position: fixed;
 top: 200px;
 left: 50px;
 
 font-size: 50px;
 background-color: #000000;
 color: #ffffff;
 
 }

Почему объект не будет двигаться после того, как его класс был установлен?

ОБНОВЛЕНИЕ: ссылка

Основная тестовая страница

Релевантными частями этого являются строки 270-297 (в основном 290-294) в функции reboottabs() для первого хода, который работает, и строки 160-183 в функции minwidget(). Извиняюсь за немного беспорядочный код :)


person C.J. Parker    schedule 29.01.2011    source источник
comment
у вас есть живая ссылка, которую мы могли бы проверить? довольно сложно отлаживать слова.   -  person bchhun    schedule 29.01.2011
comment
Вы проводили отладку с другими значениями position, чтобы увидеть, связана ли проблема конкретно со значением fixed или с чем-то другим? Вы пытались установить значение position вручную вместо того, чтобы полагаться на определение класса?   -  person JakeParis    schedule 29.01.2011
comment
Да, я пробовал с другими значениями позиции, но, к сожалению, безрезультатно ... я попытаюсь загрузить его куда-нибудь, это может занять у меня 10 минут, хотя ...   -  person C.J. Parker    schedule 29.01.2011
comment
Это чертовски круто; на большинстве других сайтов вы бы ждали ответа 3 дня, на S.O. ты извиняешься за 10 минут! Я люблю это.'   -  person JakeParis    schedule 29.01.2011


Ответы (1)


Поскольку встроенные свойства переопределяют свойства класса, вам необходимо удалить встроенные свойства.

mytarget.style.position="";

Тогда позиция fixed, определенная в классе, будет работать.

Или, возможно, используйте:

delete mytarget.style.position;

Не уверен, что предпочтительнее.

person user113716    schedule 29.01.2011
comment
Вот так. Даже если вы сбросите класс, встроенные стили, установленные JS, останутся в DOM. - person JakeParis; 29.01.2011
comment
Хм, я пробовал это, используя решение для удаления и пустой строки; попробовал это до и после назначения нового класса (хотя я думаю, что это должно быть раньше). Теперь оповещение (новая позиция + mytarget.style.position ); просто возвращает пустую строку. Конечно, положение меняется, но не там, где я хочу. теперь он идет в верхний левый угол - person C.J. Parker; 29.01.2011
comment
@C.J. Паркер. Позиционирование, которое вы получаете, будет зависеть от вашего CSS. Пока имя класса установлено правильно, оно должно работать. Убедитесь, что ваше className точно указано правильно. Единственное, что вам даст mytarget.style.position, — это свойство стиля DOM. Он не дает стиля из самого класса. Для этого вам нужно получить его вычисленное значение. Для этой цели есть функция getStyle() на этой странице. - person user113716; 29.01.2011
comment
Хорошо, спасибо за ответ, ребята. Код Патрика DW на самом деле работает нормально, меня обманули, потому что я забыл также сбросить атрибуты top и left. Есть ли способ очистить все встроенные теги? как mytarget.style= (который, похоже, не работает)? - person C.J. Parker; 29.01.2011
comment
@C.J. Паркер: Если вы хотите удалить все свойства стиля, установленные в DOM, попробуйте следующее: mytarget.setAttribute('style',''); - person user113716; 29.01.2011
comment
Круто, именно то, что мне было нужно. Еще раз спасибо за отличные ответы! - person C.J. Parker; 29.01.2011