Weboldal keresés

Be tudok állítani több értéket ugyanahhoz a CSS tulajdonsághoz Javascript segítségével?


Programozott módon szeretném beállítani a CSS cursor értékét mind -webkit-grab, mind -moz-grab értékre. Például egy stíluslapon így lenne ábrázolva

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

Tehát itt a mySelector elemhez kétszer van definiálva a kurzor. A Webkit böngészők az első definíciót használják, a Firefox a másodikat. Kíváncsi vagyok, van-e valami mód JavaScriptben az egyenértékű végrehajtására. Tudom, hogy beállíthatnék egy osztályt, de a kérdésem inkább kíváncsiságból indult, hogy lássam, lehetséges-e, nem pedig hogy jelenlegi valós problémámat oldjam meg.

Szerkesztés Tisztázásképpen - az általam közzétett CSS (bár érvényes kiválasztóval) MŰKÖDIK mindkét böngészőben. Csak arra vagyok kíváncsi, van-e olyan módszer, ami kizárólag JavaScripttel működik.

Válasz #1

A stílust a style.cssText tulajdonság használatával is beállíthatja:

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

A böngészők megpróbálják ugyanúgy értelmezni az értéket, ahogyan a CSS-t értelmezik, és alkalmazzák az összes olyan tulajdonságot, amelyet fel tudnak ismerni. De azt javaslom, hogy ezeket a stílusokat egy osztályban definiáljuk, és egyszerűen adjuk hozzá ezt az osztályt az elemhez.

Válasz #2

Egy mód, amit láttam, egyszerűen tesztelni, hogy az értékek hozzárendelése sikeres volt-e. Ha olyan értéket rendelsz hozzá, amit a böngésző nem ért, egyszerűen figyelmen kívül hagyja. Például Webkit-ben:

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

Tehát ezt a viselkedést használhatod saját függvény létrehozására:

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
    };
}());

Használat :

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

Ez valószínűleg nem fog működni minden CSS-tulajdonsággal, különösen a rövidítésekkel nem, de remélhetőleg azokkal, amelyek egyszerű értékekkel rendelkeznek.