2012-01-17 4 views
6

Więc gram z $(el).css(), próbując ustalić, czy element ma ramkę. Używam .css("border-style", "solid") ustawić granicę, która działa, ale faktycznie ustawia to 4 indywidualne style:Użyj JQuery, aby sprawdzić, czy element ma ramkę?

border-right-style 
border-left-style 
border-top-style 
border-bottom-style 

więc sprawdzanie granicy jest nieco kłopotliwe, ponieważ trzeba zrobić coś takiego:

if ($(el).css("border-right-style") == "solid" && $(el).css("border-left-style") == "solid" && ...) {} 

Po prostu sprawdzanie, czy $(el).css("border-style") != "" nie działa, ponieważ border-style jest zawsze równe "".

Czy istnieje bardziej elegancki sposób na zrobienie tego?

+0

dlaczego nie pracujesz na zajęciach? – jcvegan

+0

Zwykle robię, ale w tym konkretnym przypadku style są tak dynamiczne i tak specyficzne dla każdego elementu, że łatwiej jest to zrobić w ten sposób. –

Odpowiedz

8

border-style jest skrótem i nie można się ich razem, więc trzeba je Separatly, bo jak za Jquery CSS documentation

Shorthand CSS properties (e.g. margin, background, border) are not supported. 
For example, if you want to retrieve the rendered margin, 
use: $(elem).css('marginTop') and $(elem).css('marginRight'), and so on. 
+0

Och, wow. Więc to oficjalne! Dzięki, to wyjaśnia. –

3

Jeśli chcesz wiedzieć, czy 4 właściwości są ustawione jako ALL, to tak, musisz sprawdzić 4 właściwości. Chociaż buforowałbym selektor.

$el = $('a'); 
if ($el.css("border-right-style") == "solid" && $el.css("border-left-style") == "solid" && $el.css("border-top-style") == "solid" && $el.css("border-bottom-style") == "solid") 
{ 
    alert('yay'); 
} 

jsFiddle

+0

Pytanie, które mam, czy "styl graniczny" rzeczywiście istnieje w CSS? A może jest to skrót do pozostałych 4? –

+0

Ten drugi styl granicy ustawia 4 właściwości. Jeśli sprawdzasz za pomocą narzędzia do debugowania, zwykle są dostępne opcje "stylów obliczeniowych", które pokażą je wszystkie. Granica pojedynczego wiersza: 1 piksel na niebiesko tworzy 12 właściwości. – Sinetheta

1

ja nie wiem, czy to jest możliwe rób to, co próbujesz. DOM dostarcza tylko style dla elementu, który został przypisany w linii lub do elementu w skrypcie. Nie pokazuje, czy odziedziczył styl, taki jak granica z deklaracji CSS.

1

Trzeba jeszcze sprawdzić właściwości, ale może to zrobić to trochę bardziej abstrakcyjne ...

function check(sel, prop) { 
    var i, property, $o = $(sel), directions = ["left", "right", "top", "bottom"]; 

    for (i = 0; i < directions.length; i++) { 
     property = $o.css(prop + '-' + directions[i] + '-style'); 
     if (property !== 'solid') { 
      return false; 
     } 
    } 

    return true; 
} 
+0

Myślałem o czymś takim, ale imo jest trudniejsze do odczytania. –

+0

Przy niewielkiej zmianie można uczynić z niego wtyczkę jQuery i zlikwidować nazwę właściwości, aby można było jej ponownie użyć do przetestowania innych skróconych wartości właściwości. Zmniejszasz czytelność metody, ale zwiększasz ogólną czytelność ('$ ('p'). CheckProperty ('margin', '5px')'). – lsoliveira

0

może wyświetlić wartości stylu od odziedziczonych plików CSS ....

alert ($ ("selektor"). css ("border-bottom-color"));