2011-10-05 5 views
3

Я знаю, как применять css на одном теге (или меняя класс на нем), но ЭТО НЕ ЧТО Я ПРОШУ!Как изменить класс CSS с помощью JavaScript?

Я хотел бы изменить атрибут внутри класса CSS, не касаясь элемента, в котором применяется класс.

Другими словами, если это CSS

.myclass { 
    font-size: 14px; 
    color: #aab5f0; 
} 

и это HTML

<span id="test" class="myclass"> foo bar </span> 

увеличить шрифт размаху теге я хочу изменить содержимое класса и НЕ делать что-то вроде

var fontsize = parseInt($('#test').css('font-size').replace(/[^-\d\.]/g, '')); 
fontsize += 10; 
$('#test').css('font-size', fontsize+'px'); 

Я хочу, чтобы класс становится

.myclass { 
     font-size: 18px; 
     color: #aab5f0; 
    } 

Есть ли способ изменить фактический класс через Javascript?

Мое другое решение было бы поставить CSS в контейнер и залейте контейнер каждый раз, но у меня есть ощущение, что это не очень хорошая идея ...

+0

Если это действительно только для одного элемента, то придерживайтесь именно то, что у вас есть. На самом деле, я не уверен, почему вы хотели бы «изменить класс». Хотя, это возможно. – thirtydot

+1

Нет, это не только для одного элемента, это для 100 различных тегов span, которые динамически создаются функцией и помещаются на страницу с абсолютным позиционированием для создания «облака». Проблема в том, что я не могу коснуться диапазона (я имею в виду, это бесполезно), потому что мне нужно снова запустить функцию для создания и размещения новых больших слов на странице, чтобы быть уверенными, что слова не будут перекрываться. –

+0

Немного приятности идет долгий путь ... Потому что многие люди не понимают вопрос (включая меня), может быть, ваша формулировка вопроса требует больше работы и менее смелой. –

ответ

6

Я думаю, что в идеале вы должны определить базу размер шрифта на элементе html или body. Все остальные размеры шрифта в CSS должны быть по отношению к этому «мастер» размер шрифта, например, так:

body { 
    font-size: 12px; 
} 

[everything else] { 
    font-size: 1.0em; 
} 

Затем, когда вы регулируете размер шрифта тела через jQuery.css(), то другие элементы будут автоматически корректировать свой размер относительно родителя.

$(body).css('font-size', '14px'); 

Вы не должны использовать body уровень, можно определить базовый размер шрифта DIV или другой контейнер и использовать его в качестве родителя вместо этого.

Существует рабочий образец этой техники here.

+1

Я думаю, что это хороший ответ (и, может быть, вы единственный, кто понял проблему). Благодарю. –

+0

@GiovanniDiMilia: Добро пожаловать. Счастливое кодирование! –

2

Мой комментарий несмотря на это, посмотрите на этот вопрос: Setting CSS pseudo-class rules from JavaScript

Изменение класса и «настройки правил псевдо-класса» достигается тем же способом.

@Box9's answer, вероятно, один вы должны реально использовать:

я бросил вместе с small library for this, так как я считаю, что допустимы случаи использования для манипулирования таблиц стилей в JS.

+1

GREAT маленькая библиотека! Думаю, я собираюсь использовать его в другом проекте! Благодаря! –

0

Не нужно менять сам класс. Чтобы переопределить поведение, просто добавьте другой класс в существующий или полностью измените его. Я покажу первый вариант:

.myclass { 
    font-size: 14px; 
    color: #aab5f0; 
} 
.myclass.override { 
    font-size: 12px; 
} 

И тогда все, что вам нужно сделать с JavaScript, чтобы переключить класс перенастройки.Таким образом, это также намного лучше, поскольку вся презентация выполняется в CSS.

+1

Я прямо сказал, что не хочу касаться тега span. Я знаю, как это лучший способ сделать это, но я не могу применить эту технику. Кстати, это не работает даже в моем примере! –

+1

Я действительно пропустил эту линию, извините. Но теперь, снова глядя, я не понимаю, как добавление класса «затрагивает» тег, но применение стилей непосредственно к нему не делает. И почему вы говорите, что это не работает в вашем примере? – deviousdodo

+1

Проблема в том, что я хочу, чтобы увеличить размер нескольких тегов, генерируемых динамически и размещенных на странице в соответствии с их размером. Теперь, если я применяю другой класс или добавляю другой, как вы предлагаете, когда я повторно создаю теги span, я собираюсь потерять информацию, которую я применял раньше. –

0

Поскольку очевидно, что вы используете jQuery, см. Функции и removeClass.

$('#test').removeClass('myClass').addClass('yourClass'); 
+1

Какая часть NOT TOUCHING THE SPAN TAG нечеткая? Я не хочу касаться тега span, я знаю, как решить проблему с помощью этой техники, но я не хочу делать это таким образом! –

+1

", чтобы увеличить шрифт тега span Я хочу изменить класс и НЕ делать что-то вроде" ... следовательно, изменить класс. Думаю, я просто не понимаю разницы между изменением класса на пролете и изменением класса в CSS. Если ничего другого, просто используйте дополнительный класс с другим шрифтом. (просто используйте .addClass ('largeFontSize') или что-то в равной степени как банальное). –

+1

Я имею в виду, что я не хочу изменять имя класса тега span, я хочу изменить атрибут «font-size» внутри класса. Разница в том, что в другом фрагменте кода я собираюсь удалить тег span и заново создать его и поместить его на страницу в соответствии с ее размером. Если я изменю размер шрифта внутри элемента (или имени класса), когда я сделаю то, что я только что описал, я потеряю это изменение и получаю значения по умолчанию! –

-2

Просто JQuery:

$('#test').attr('class','bigFont'); 

или родной JS:

document.getElementById('test').className ='bigFont'; 

ОБНОВЛЕНО

var size = [ 10 , 20 , 30 ] ; 
var i =0; 
$('#test').css('font-size',size[i]+'px'); 
i = (i+1)%size.length ; 
+0

Я не хочу касаться тега span, я знаю, как решить проблему с помощью этой техники, но я не хочу так делать! –

0

ищет то же самое.

Это было мое решение

https://jsfiddle.net/sleekinteractive/0qgrz44x/2/

HTML 

<p>The Ants in France stay mainly on the Plants</p> 

CSS 

p{ 
font-family:helvetica; 
font-size:15px; 
} 

JAVASCRIPT (uses jQuery) 

function overwrite_css(selector,properties){ 

// selector: String CSS Selector 
// properties: Array of objects 

var new_css = selector + '{'; 

for(i=0;i<properties.length;i++){ 

new_css += properties[i].prop + ':' + properties[i].value + ';'; 

} 

new_css += '}'; 

$('body').append('<style>' + new_css + '</style>'); 

} 

overwrite_css('p',Array({prop: 'font-size', value: '22px'})); 
overwrite_css('p',Array({prop: 'font-size', value: '11px'})); 
overwrite_css('p',Array({prop: 'font-size', value: '66px'})); 

// ends on 66px after running all 3. comment out lines to see changes 
Смежные вопросы