JavaScript / JQuery: используйте $ (this) в имени переменной - PullRequest
3 голосов
/ 08 февраля 2010

Я пишу плагин jquery, который изменяет css-значение определенных элементов при определенных действиях пользователя.При других действиях значение css должно быть сброшено до первоначального значения.

Поскольку я не нашел способа вернуть начальные значения css, я просто создал массив, в котором вначале хранятся все начальные значения.

Я сделал это с:

var initialCSSValue = new Array()

довольно в начале моего плагина и позже, в каком-то цикле настройки, где все мои элементы доступны, я использовал

initialCSSValue[$(this)] = parseInt($(this).css('<CSS-attribute>'));

Это очень хорошо работает в Firefox.Тем не менее, я только что узнал, что IE (даже v8) имеет проблемы с повторным доступом к определенному значению, используя

initialCSSValue[$(this)]

где-то еще в коде.Я думаю, это связано с тем, что я использую объект ($ (this)) в качестве имени переменной.

Есть ли способ обойти эту проблему?

Спасибо

Ответы [ 4 ]

2 голосов
/ 08 февраля 2010

Использование $(this).data()

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

Сделайте что-то вроде этого (где <CSS-attribute> заменяется именем атрибута css):

$(this).data('initial-<CSS-attribute>', parseInt( $(this).css('<CSS-attribute>') ) );

Затем вы снова можете получить к нему доступ, например:

$(this).data('initial-<CSS-attribute>');

Альтернативный способ с использованием data:

В вашем плагине вы можете сделать небольшую вспомогательную функцию, подобную этой, если вы хотите избежать слишком большого использования data:

var saveCSS = function (el, css_attribute ) {
   var data = $(el).data('initial-css');
   if(!data) data = {};
   data[css_attribute] = $(el).css(css_attribute);
   $(el).data('initial-css', data);
}
var readCSS = function (el, css_attribute) {
   var data = $(el).data('initial-css');
   if(data && data[css_attribute])
     return data[css_attribute];
   else
     return "";
}
1 голос
/ 08 февраля 2010

Индексирование массива с помощью объекта jQuery выглядит подозрительно. Я бы использовал идентификатор объекта для ключа массива.

initialCSSValue[$(this).attr("id")] = parseInt...
0 голосов
/ 09 февраля 2010

если кто-то хочет увидеть плагин в действии, посмотрите его здесь: http://www.sj -wien.at / Leopoldstadt / Zeug / Marcel / slidlabel / jsproblem.html

0 голосов
/ 08 февраля 2010

О, пожалуйста, не делай этого ...:)

Напишите немного CSS и используйте addClass и removeClass - впоследствии стили не будут затронуты

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...