2011-10-10 11 views
6

Czy istnieje przepis na uzyskanie odpowiednich nazw?Nazwy właściwości stylów CSS - przejście z wersji standardowej do wersji JS właściwości camelCase i na odwrót:

Funkcja Piszę musi zarówno ustawić styl poprzez element.style[propnameCamelCase] i odzyskać istniejącą wartość świadczonych przez document.defaultView.getComputedStyle(element,'').getPropertyValue(propname-regular) i ledwo mogę uzasadnić konieczności przechodzenia dwa oddzielne ale semantycznie identycznych argumentów tej funkcji.

Wiem, że dla większości z nich jest to dość prosta transkrypcja między camelCase i dywizem rozdzielonym tymi samymi słowami, więc mogę używać wyrażenia regularnego, aby je konwertować. Ale może jest kilka takich, które nie są takie?

Off górze głowie mam twardy czas na zastanawianie się, jak radzić sobie z aktywowanych liter dla przypadku wielbłąda z wyrażeń regularnych.

edit: Ach, mógłbym użyć funkcję regex zastąpić, za każdym razem widzę, myślnik, konwersja następnej litery na wielkie litery.

+0

Właściwości css zwykle mają łączniki, a nie podkreślenia. – Spudley

+0

Tak, moje złe. Naprawiono –

Odpowiedz

5

Więc w zasadzie wymyślania jQuery.css(). Być może spojrzenie na to, w jaki sposób jQuery rozwiązał problem z camelCase, może pomóc: https://github.com/jquery/jquery/blob/master/src/core.js#L600

+2

Domyślam się, że jeśli ich rozwiązaniem jest zamiana na camelcase, to właśnie to zrobię: 'function toCamelCase (variable) {return variable.replace (/ - ([az])/g, function (str, letter) {return letter.toUpperCase();});} ' –

+0

Nie znam twoich okoliczności/środowiska/wymagań, ale zwykle nie jest złym pomysłem używanie (takich szeroko rozpowszechnionych i często używanych) bibliotek, takich jak jQuery. Zwykle biorą pod uwagę rzeczy, o których nawet nie wiesz (np. Nie poprawiają poprawnie prefiksu dostawcy -ms). Nie prowadzę ewangelizacji jQuery, ale powinieneś mieć wodoodporne powody, aby jej nie używać (lub dojo, lub jakakolwiek biblioteka unosi twoją łódź). – rodneyrehm

+0

I odwrotnie, jQuery jest ogromną i często powolną biblioteką, której możesz nie chcieć dodawać dla pojedynczej funkcji –

1

Już miałem zadać pytanie dotyczące tej samej rzeczy (i zamierzałem ją nazwać "Przetłumacz nazwy css na \ z odpowiedników javascript"). W jakiś sposób napisałem własne rozwiązanie.

function cssNameToJsName(name) 
{ 
    var split = name.split("-"); 
    var output = ""; 
    for(var i = 0; i < split.length; i++) 
    { 
     if (i > 0 && split[i].length > 0 && !(i == 1 && 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(); 
} 
Powiązane problemy