Имена свойств в стиле CSS — переход от обычной версии к свойству JS camelCase version и наоборот

#javascript #css

#javascript #css

Вопрос:

Существует ли условие для получения соответствующих имен?

Функция, которую я пишу, должна как задавать стиль с помощью element.style[propnameCamelCase] , так и извлекать существующее отображаемое значение с помощью document.defaultView.getComputedStyle(element,'').getPropertyValue(propname-regular) , и я вряд ли могу оправдать необходимость передачи двух отдельных, но семантически идентичных аргументов этой функции.

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

С головы до ног мне трудно понять, как обращаться с заглавными буквами для camel case с регулярными выражениями.

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

Комментарии:

1. свойства css обычно имеют дефисы, а не подчеркивания.

Ответ №1:

Таким образом, вы по сути заново изобретаете jQuery.css() . Возможно, взгляд на то, как jQuery решил проблему camelCase, может помочь: https://github.com/jquery/jquery/blob/master/src/core.js#L600

Комментарии:

1. Я думаю, если их решение действительно преобразовать в camelcase, то это то, что я сделаю: function toCamelCase(variable) { return variable.replace(/-([a-z])/g,function(str,letter){ return letter.toUpperCase();});}

2. Я не знаю ваших обстоятельств / условий / требований, но обычно неплохо использовать (такие широко распространенные и часто используемые) библиотеки, такие как jQuery. Обычно они учитывают вещи, о которых вы даже не знаете (например, IE неправильно использует префикс поставщика -ms). Я не проповедую jQuery, но у вас должны быть веские причины не использовать его (или dojo, или любую другую библиотеку, которая поддерживает вашу лодку).

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

4. Я сталкивался с сайтами, на которых до четырех экземпляров разных версий jQuery загружались в различные iframe, созданные разными разработчиками, которые, вероятно, согласились, что «обычно неплохо использовать широко распространенную и часто используемую библиотеку». Помимо явного раздувания, это создает неизвестные, которые усложняют отладку. Одно это кажется мне веской причиной избегать использования jQuery в целом . Для создания прототипов это прекрасный инструмент, но при создании компонентов для более широкой веб-экосистемы это является помехой.

5. @rodneyrehm Водонепроницаемая причина не использовать jQuery заключается в том, что после его использования вы все еще даже не знаете о том, что вам нужно учитывать.

Ответ №2:

Я собирался задать вопрос об одном и том же (и я намеревался назвать его «Translate css names to from javascript аналоги»). Каким-то образом я закончил тем, что написал свое собственное решение.

 function cssNameToJsName(name)
{
    var split = name.split("-");
    var output = "";
    for(var i = 0; i < split.length; i  )
    {
        if (i > 0 amp;amp; split[i].length > 0 amp;amp; !(i == 1 amp;amp; split[i] == "ms"))
        {
            split[i] = split[i].substr(0, 1).toUpperCase()   split[i].substr(1);
        }
        output  = split[i];
    }
    return output;
}

function jsNameToCssName(name)
{
    return name.replace(/([A-Z])/g, "-$1").toLowerCase();
}
  

Ответ №3:

Я хотел бы упомянуть, что CSSStyleDeclaration.style.setProperty принимает имена свойств типа css / дефис без преобразования, как описано здесь

Попробуйте это свойство с переносом, например:

 document.body.style.setProperty("background-color", "red");
  

Вы также можете сделать это:

 document.body.style["background-color"] = "silver";
  

Эти подходы — если вы можете их использовать — могут быть проще.