Kan jeg sette flere verdier for den samme CSS-egenskapen med Javascript?


Jeg vil programmessig sette CSS-verdien cursor til både -webkit-grab og -moz-grab. For eksempel, i et stilark, ville det bli representert som

mySelector{
    cursor:-webkit-grab;
    cursor:-moz-grab;
}

Så her har mySelector-elementet markøren definert to ganger. Webkit-nettlesere bruker den første definisjonen, Firefox den andre. Jeg lurer på om det finnes en måte i Javascript å gjøre det tilsvarende. Jeg skjønner at jeg kunne satt en klasse, men spørsmålet mitt var mer av nysgjerrighet for å se om det var mulig, enn å løse et virkelig problem jeg har for øyeblikket.

Rediger For å klargjøre - CSS-en jeg har lagt ut (selv med en gyldig selektor) FUNGERER i begge nettleserne. Jeg lurer bare på om det finnes en måte å gjøre dette kun med JavaScript.

Svar #1

Du kan også sette stilen ved å bruke style.cssText-egenskapen:

element.style.cssText = "cursor:-webkit-grab; cursor:-moz-grab; cursor:grab;";

Nettlesere vil prøve å analysere verdien på samme måte som de analyserer CSS og bruke alle egenskapene de kan gjenkjenne. Men jeg vil foreslå å definere disse stilene i en klasse og bare legge til denne klassen på elementet i stedet.

Svar #2

En måte jeg har sett er å ganske enkelt teste om tildelingen av verdiene var vellykket. Hvis du tildeler en verdi som nettleseren ikke forstår, ignorerer den den ganske enkelt. For eksempel i webkit:

> d = document.createElement('div')
  <div></div>
> d.style.cursor = '-moz-grab';
  "-moz-grab"
> d.style.cursor
  ""

Så du kan bruke den oppførselen til å lage din egen funksjon:

var setVendorStyle = (function() {
    var vendor_prefix = ['-moz-', '-webkit-'];
    return function(element, prop, value) {
        // try unmodified value first
        element.style[prop] = value;
        if (element.style[prop] === value) {
           return value;
        }
        // try vendor prefixes
        for (var i = 0, l = vendor_prefix.length; i < l; i++) {
           var vendor_value = vendor_prefix[i] + value;
           element.style[prop] = vendor_value;
           if (element.style[prop] === vendor_value) {
              return vendor_value;
           }
        }
        return false; // unsuccessful
    };
}());

Bruk:

setVendorStyle(element, 'cursor', 'grab');

Dette vil sannsynligvis ikke fungere for hver CSS-egenskap, spesielt ikke med snarveier, men forhåpentligvis for de med enkle verdier.