Chciałbym zwrócić ciąg z całą zawartością reguły CSS, taki jak format, który zobaczysz w stylu wbudowanym. Chciałbym móc to zrobić, nie wiedząc, co zawiera konkretna reguła, więc nie mogę po prostu wyciągnąć ich po nazwie stylu (np .style.width
.)
CSS:
.test {
width:80px;
height:50px;
background-color:#808080;
}
Dotychczasowy kod:
function getStyle(className) {
var classes = document.styleSheets[0].rules || document.styleSheets[0].cssRules
for(var x=0;x<classes.length;x++) {
if(classes[x].selectorText==className) {
//this is where I can collect the style information, but how?
}
}
}
getStyle('.test')
javascript
html
css
Diodeus - James MacFarlane
źródło
źródło
Odpowiedzi:
Adaptacją tutaj , opierając się na odpowiedź scunliffe za:
źródło
var classes
powinno byćdocument.styleSheets[0].rules[0].cssRules
w Chrome. Można to (twórczo) dodać do podkładki w odpowiedzi.Ponieważ zaakceptowana odpowiedź od „nsdel” jest dostępna tylko z jednym arkuszem stylów w dokumencie, jest to dostosowane, pełne rozwiązanie robocze:
Uwaga: selektor musi być taki sam jak w CSS.
źródło
global_
jest tylko aliasem dla obiektu okna. Dokonałem edycji fragmentu kodu. Powinno teraz działaćROZWIĄZANIE 1 (PRZEGLĄDARKA KRZYŻOWA)
ROZWIĄZANIE 2 (PRZEGLĄDARKA KRZYŻOWA)
źródło
Niektóre różnice w przeglądarkach, o których należy pamiętać:
Biorąc pod uwagę CSS:
i biorąc pod uwagę przykład InsDel, klasy będą miały 2 klasy w FF i 3 klasy w IE7 .
Mój przykład to ilustruje:
źródło
Oto kod do iteracji przez wszystkie reguły na stronie:
źródło
Uwaga: „menu” to identyfikator elementu, do którego zastosowałeś CSS. „className” nazwa klasy css, której potrzebujemy, aby uzyskać tekst.
źródło
item
metoda przyjmuje indeks w postaci liczby całkowitej, a nie nazwę klasy).Nie znalazłem żadnej z sugestii, które naprawdę działają. Oto bardziej solidny, który normalizuje odstępy podczas wyszukiwania klas.
Oto to w akcji z konsoli Chrome.
źródło
Zrobiłem podobną funkcję pomocniczą, która pokazuje niepotrzebne style dla tej strony. dodaje
<div>
do treści listę wszystkich stylów, które nie były używane.(do użytku z konsolą firebug)
źródło
Dostosuj odpowiedź julmota, aby uzyskać pełniejszy wynik. Ta metoda zwróci również style, w których klasa jest częścią selektora.
Ponadto stworzyłem funkcję, która zbiera definicje stylów css do poddrzewa węzła głównego, który podałeś (za pomocą selektora jquery).
Zauważ, że jeśli klasa została zdefiniowana kilka razy z tym samym selektorem, powyższa funkcja wybierze tylko pierwszą. Zwróć uwagę, że przykład używa jQuery (ale cab można stosunkowo łatwo przepisać, aby go nie używać)
źródło
// działa w IE, nie jestem pewien co do innych przeglądarek ...
źródło
Ta wersja przejdzie przez wszystkie arkusze stylów na stronie. Na moje potrzeby style znajdowały się zwykle od drugiego do ostatniego z ponad 20 arkuszy stylów, więc sprawdzam je wstecz.
źródło
Dodałem powrót obiektu, w którym atrybuty są parsowane styl / wartości:
źródło
style.cssText.match(...).1
jest zerowy lub nie jest przedmiotemUncaught ReferenceError: classStyleTxt is not defined
Stworzyłem wersję, która przeszukuje wszystkie arkusze stylów i zwraca dopasowania jako obiekt klucz / wartość. Możesz także określić beginWith, aby dopasować style potomne.
zwroty:
z:
Kod:
Używam tego w produkcji w ramach projektu czystej formy . Mam nadzieję, że to pomoże.
źródło
Miałem ten sam problem. Z pomocą facetów wymyśliłem naprawdę sprytne rozwiązanie, które całkowicie rozwiązuje ten problem (działa na Chrome).
Wyodrębnij wszystkie obrazy z sieci
źródło
W jednej linii wypisuje wygenerowany css dla dowolnego zapytania.
źródło
Na podstawie odpowiedzi @dude powinno to zwrócić odpowiednie style w obiekcie, na przykład:
To zwróci:
Kod:
źródło
_.pickBy(classes[x].style, (k,v) => isNaN(parseInt(k)) && typeof(v) == 'string' && v && v != 'initial' && k != 'cssText' )