jQuery: установка атрибута 'style' элемента с объектом - PullRequest
10 голосов
/ 04 мая 2010

Я видел это в нашей кодовой базе на днях:

            link.attr('style', map({
                color: '#9a4d9e',
                cursor: 'default'
            }));

map определяется как:

function map(map) {
    var cssValue = [];

    for (var o in map) {
        cssValue.push(o + ':' + map[o] + ';')
    }

    return cssValue.join(';');
}

Обязательно ли map? Есть ли более короткий способ сделать это?

Важно отметить, что атрибут «style» переопределяет любые стили, установленные классом, добавленным / определенным в атрибуте «class».

Ответы [ 2 ]

19 голосов
/ 04 мая 2010

Наверное, нет. Лучшим решением может быть использование CSS:

link.css({color: '#9a4d9e',
          cursor: 'default'});

Однако .attr('style',) также удаляет предыдущий встроенный стиль, поэтому он не ведет себя точно так же.
Если вы собираетесь использовать attr, его ввод должен быть строкой, а не объектом, он не специализирован для работы с атрибутом style. альтернатива в этом случае:

link.attr('style', "color:'#9a4d9e';cursor:'default'");

Кажется чище в этом случае. В других случаях ваш map облегчает вставку переменных в CSS.
map можно было бы назвать лучше, хотя. Он также имеет ошибку реализации - он добавляет двойные точки с запятой между атрибутами: color:red;;cursor:default;

Простым решением для удаления стиля предварительного просмотра является вызов .removeAttr('style') перед вызовом css.

0 голосов
/ 13 октября 2017

.addClass ('выделение') для элемента. Где ваш класс CSS предопределен. (у меня это сработало, так как не хотелось делать 2 изменения атрибута стиля)

...