Я пытаюсь переключить видимость определенных элементов DIV на веб-сайте в зависимости от класса каждого DIV. Я использую простой фрагмент кода JavaScript, чтобы переключать их. Проблема в том, что скрипт только использует getElementById
, а getElementByClass
не поддерживается в JavaScript. И, к сожалению, мне нужно использовать class, а не id для именования DIV, потому что имена DIV динамически генерируются моей таблицей стилей XSLT с использованием определенных имен категорий.
Я знаю, что некоторые браузеры теперь поддерживают getElementByClass
, но, поскольку Internet Explorer не поддерживает , я не хочу идти по этому пути.
Я нашел сценарии, использующие функции для получения элементов по классам (например, # 8 на этой странице: http://www.dustindiaz.com/top-ten-javascript/ ), но я не могу понять, как их интегрировать с моим сценарием переключения.
Вот HTML-код. Сами DIV отсутствуют, поскольку они генерируются при загрузке страницы с помощью XML / XSLT.
Главный вопрос: как получить приведенный ниже сценарий Toggle для получения элемента по классу вместо получения элемента по идентификатору?
<html>
<head>
<!--This is the TOGGLE script-->
<script type="text/javascript">
<!--
function toggle_visibility(id) {
var e = document.getElementById(id);
if(e.style.display == 'block')
e.style.display = 'none';
else
e.style.display = 'block';
}
//-->
</script>
</head>
<!--the XML/XSLT page contents will be loaded here, with DIVs named by Class separating dozens of li's-->
<a href="#" onclick="toggle_visibility('class1');">Click here to toggle visibility of class 1 objects</a>
<a href="#" onclick="toggle_visibility('class2');">Click here to toggle visibility of class 2 objects</a>
</body>
</html>
Ответы:
Современные браузеры поддерживают
document.getElementsByClassName
. Вы можете увидеть полную разбивку поставщиков, предоставляющих эту функциональность, на caniuse . Если вы хотите расширить поддержку старых браузеров, вы можете рассмотреть механизм выбора, подобный тому, что есть в jQuery или polyfill.Старый ответ
Вы захотите проверить jQuery , который позволит следующее:
$(".classname").hide(); // hides everything with class 'classname'
Google предлагает размещенный исходный файл jQuery, так что вы можете ссылаться на него и сразу же приступить к работе. Включите на свою страницу следующее:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> <script type="text/javascript"> $(function(){ $(".classname").hide(); }); </script>
источник
<script>
тегов. JQuery, размещенный в Google, разработан специально для рабочих веб-сайтов (как CDN). Если ваш сайт https, просто убедитесь, что вы используете версию https, чтобы избежать предупреждения о смешанном содержании.<script>
внедрение тегов является основой межсайтовых запросов JSONP.Этот
getElementsByClassName
метод теперь изначально поддерживается самыми последними версиями Firefox, Safari, Chrome, IE и Opera, вы можете создать функцию, чтобы проверить, доступна ли собственная реализация, в противном случае используйте метод Дастина Диаза:function getElementsByClassName(node,classname) { if (node.getElementsByClassName) { // use native implementation if available return node.getElementsByClassName(classname); } else { return (function getElementsByClass(searchClass,node) { if ( node == null ) node = document; var classElements = [], els = node.getElementsByTagName("*"), elsLen = els.length, pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)"), i, j; for (i = 0, j = 0; i < elsLen; i++) { if ( pattern.test(els[i].className) ) { classElements[j] = els[i]; j++; } } return classElements; })(classname, node); } }
Применение:
function toggle_visibility(className) { var elements = getElementsByClassName(document, className), n = elements.length; for (var i = 0; i < n; i++) { var e = elements[i]; if(e.style.display == 'block') { e.style.display = 'none'; } else { e.style.display = 'block'; } } }
источник
document.getElementsByClassName('CLASSNAME')[0].style.display = 'none';
Иногда, используя getElementsByClassName, он возвращает массив из нескольких классов. Поскольку одно и то же имя класса может использоваться более чем в одном экземпляре внутри одной HTML-страницы. Мы используем идентификатор элемента массива для нацеливания на нужный нам класс, в моем случае это первый экземпляр данного имени класса. Поэтому я использовал [0]
источник
Используйте его для доступа к классу в Javascript.
<script type="text/javascript"> var var_name = document.getElementsByClassName("class_name")[0]; </script>
источник
добавляя к ответу CMS , это более общий подход,
toggle_visibility
который я только что использовал:function toggle_visibility(className,display) { var elements = getElementsByClassName(document, className), n = elements.length; for (var i = 0; i < n; i++) { var e = elements[i]; if(display.length > 0) { e.style.display = display; } else { if(e.style.display == 'block') { e.style.display = 'none'; } else { e.style.display = 'block'; } } } }
источник
Мое решение:
Сначала создайте теги «<style>» с идентификатором.
<style id="YourID"> .YourClass {background-color:red} </style>
Затем я создаю в JavaScript такую функцию:
document.getElementById('YourID').innerHTML = '.YourClass {background-color:blue}'
Сработало для меня как шарм.
источник
<br>
) бесполезны / недействительны в теге стиляДобавить идентификаторы в объявление класса
.aclass, #hashone, #hashtwo{ ...codes... } document.getElementById( "hashone" ).style.visibility = "hidden";
источник