2015-02-09 3 views
-1

Вот ДИВ, к которому я пытаюсь добавить классНевозможно добавить класс динамически в окне изменения размера

<div id="sidebar" class="addthis_recommended_horizontal col-lg-4 col-md-4 col-sm-6 col-xs-12""></div> 

и это скрипт я использую

<script>window.onresize=function() 
{var width=document.getElementById("#sidebar").clientWidth; 
if(width<640) {document.getElementById("#sidebar").setAttribute("class",".sidebar");} 
</script> 

После добавления этого класса, этот код CSS меняет ширину

.sidebar.at4-recommended-item{width:45%!important} 

Но класс не добавлялся, я не знаю почему?

EDIT Я использую медиа-запросы. В этом случае два класса имеют одно и то же имя. Если я изменил один другой, это тоже изменится, поэтому я добавляю класс динамически, и это не полная ширина окна, которую мне нужно изменить.

ПОЧЕМУ ЯВЛЯЮТСЯ ЛЮДЬМИ, КОТОРЫЕ БЫЛИ ЗАКЛЮЧЕННЫМИ КАЖДОМУ ВОПРОСУ ЗДЕСЬ?

+0

У вас только один нисходящий ...:/(_I не уменьшал вас) –

+0

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

ответ

0

Не используйте # при выборе элемента по document.getElementById. # используется в селекторах css/jQuery, а не в простом JavaScript. а также вы добавляете имя класса при изменении размера окна ниже 640, вы также должны рассмотреть возможность удаления этого класса при изменении размера выше 640.

Пожалуйста, попробуйте использовать следующий код:

<script> 
    window.onresize=function() { 
     var sidebar = document.getElementById("sidebar"); 
     var width = sidebar.clientWidth; 
     if(width<640) { 
      sidebar.className ="sidebar"; 
     } 
     else{ 
      sidebar.className = ""; //assuming this element doesn't have any other classes. 
     } 
    } 
</script> 

Если вы хотите использовать JQuery то,

<script> 
    window.onresize=function() { 
     var sidebar = $("#sidebar"); 
     var width = sidebar.width(); 
     if(width<640) { 
      sidebar.addClass("sidebar"); 
     } 
     else{ 
      sidebar.removeClass("sidebar"); 
     } 
    } 
</script> 
+3

Не существует свойства 'class', а' className'. Можно также использовать '.classList.add (« sidebar »)'. –

+2

«*' # 'используется только в селекторах jQuery, а не в простом JavaScript. *" - '#' используется в селекторах CSS, а не в селекторах jQuery, и используется в простых методах JavaScript, таких как 'document.querySelector() 'и' document.querySelectorAll() '(среди нескольких других). –

+0

@BALAJI, я внес изменения в ваш пост по мере необходимости. пожалуйста, проверьте.. –

1

Поскольку вы меняете ширину элемента на окне изменения размера, в идеале вы должны использовать @media CSS3 в вместо запросов!

В вашем случае запрос @media будет:

<style> 
    @media (max-width: 640px){ 
     #sidebar{ 
      width: 45%; 
     } 
    } 
</style> 

Это плохая идея, чтобы написать Javascript только для этой цели.

Подробнее:CSS @media queries | MDN

EDIT:

Если вы добавляете класс динамически, просто отметим, что в @media запросе:

<style> 
    @media (max-width: 640px){ 
     .sidebar{ 
      width: 45%; 
     } 
    } 
</style> 

Держите его просто. :)

+1

[Замечание к OP] медиа-запросов не поддерживает IE8 и ниже. –

+0

[Замечание к OP] Respond. является обязательным, если вы хотите использовать медиа-запросы в IE8. Это полиполк, который позволяет использовать медиа-запросы для браузера. [См. Этот ответ] (http://stackoverflow.com/a/7777281/586051). –

+0

Я использую средства массовой информации, но я не могу их использовать. В этом случае. – Asain