Document.getElementByClassName не работает, но document.getElementById работает

Вот HTML с двумя div, которые у меня есть. Я хочу установить отдельную границу для каждого div. Когда я использую отдельный идентификатор метода для обоих div, он работает, но когда я использую класс, это не так. Как я могу заставить его работать, используя одно и то же имя класса для нескольких div, чтобы установить границу.

<body onload = "myFunction()">

<script>
function myFunction() {

    document.getElementByClassName("myDiv").style.border = "thin solid #0000FF";

}

</script>




<style type = "text/css">
	.myDiv {

		border: "thick solid #0000FF;"
	}
</style>

<p>&nbsp;</p>
<h1><strong style = "color: #ff0000;">Mechannics</strong></h1>
<div>
<div class = "rawal">
<p>&nbsp;</p>
<div class = "myDiv" style = "padding: 8px;">
<p><span style = "color: #00bcf4;"><strong>1) <u>Units of Measurement</u></strong></span></p>
<p><strong><em>@ K</em></strong><em>ing &nbsp;<strong>H</strong>ector&nbsp; <strong>D</strong>ied &nbsp;<strong>M</strong>ysteriously&nbsp;<strong>D</strong>rinking&nbsp;</em></p>
<span style = "color: #0000ff;"><strong>&nbsp; &nbsp;K</strong>ilo&nbsp;&nbsp;<strong>H</strong>ecto&nbsp; &nbsp;<strong>D</strong>eka &nbsp;<strong>M</strong>eter&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>D</strong>eci&nbsp;&nbsp;&nbsp;&nbsp;</span>
<p>&nbsp;</p>
<p><strong><em>C</em></strong><em>hoklate&nbsp;<strong>M</strong>ilk</em></p>
<span style = "color: #0000ff;"><strong>C</strong>enti&nbsp;&nbsp;&nbsp;&nbsp; Milli</span>
<p>&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;</p>
</div>

<br>
<br>

<div class = "myDiv">

<p><span style = "color: #00bcf4;"><strong><u>2) Tens ' Multipliers</u></strong></span></p>
<p><strong><em>@ D</em></strong><em>esi&nbsp;</em>&nbsp; &nbsp;<strong><em>H</em></strong><em>ero</em>&nbsp;&nbsp;<strong><em>K</em></strong><em>illed&nbsp;<strong>M</strong>ega&nbsp;<strong>G</strong>igantic&nbsp;<strong>T</strong>errorists</em></p>
<span style = "color: #0000ff;"><strong>&nbsp;&nbsp; D</strong>ekka&nbsp;&nbsp;<strong>H</strong>ecto &nbsp;<strong>K</strong>ilo&nbsp;&nbsp;<strong>M</strong>ega&nbsp;&nbsp;<strong>G</strong>iga&nbsp;&nbsp;&nbsp;&nbsp;<strong>T</strong>era</span>
<p>&nbsp; &nbsp;10<sup>1</sup>&nbsp;&nbsp;&nbsp;&nbsp;10<sup>2</sup>&nbsp;&nbsp;&nbsp;&nbsp;10<sup>3</sup>&nbsp; &nbsp;10<sup>6</sup>&nbsp;&nbsp;&nbsp;&nbsp;10<sup>9</sup>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;10<sup>12</sup></p>
<p>&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;</p>

</div>

и вот изображение, которое я хочу получить, когда я использую отдельный идентификатор для обоих и используйте функцию

 document.getElementById("myDiv").style.border = "thin solid #0000FF";


document.getElementById("myDivv").style.border = "thin solid #0000FF";

Проблема

getElementByClassName не существует. Либо используйте вместо него getElementsByClassName, либо, что еще лучше, вообще избегайте HTMLCollections и используйте вместо него querySelectorAll (который возвращает статический NodeList, который напрямую перебирается в современных браузерах)

CertainPerformance 02.05.2018 04:34

@CertainPerformance getElementsByClassName также не работает.

Bir Nepali 02.05.2018 04:37

@BirNepali - держу пари, вы неправильно его используете - ожидаете единственного узла?

Jaromanda X 02.05.2018 04:37

вам нужен document.getElemenstByClassName("myDiv")[0].style.border - потому что именно так вы используете HTMLCollections / NodeLists

Jaromanda X 02.05.2018 04:38

@JaromandaX jsfiddle.net/m4jv0jrm Он действительно возвращает HTMLCollection, как и все методы getElementsBy*.

CertainPerformance 02.05.2018 04:38

lol, я толстый палец (никогда не знаю, что возвращает) ... и тестировал getElementsByName вместо getElementsByClassName - mea culpa: p (примечание, не ВСЕ getElementsBy*)

Jaromanda X 02.05.2018 04:39

@JaromandaX, Он работает только для первого div, а остальные div остаются такими же ... так какой смысл использовать класс вместо ID. Я хочу использовать тот же стиль для нескольких div здесь .. не только для первого ... есть лучшая альтернатива.

Bir Nepali 02.05.2018 04:40

о, так вы хотите, чтобы он работал больше ... затем повторять через HTMLCollection (цикл for хорошо работает для новичков)

Jaromanda X 02.05.2018 04:40

любой пример будет лучшим ... и один вопрос вместо использования скрипта, когда я использую <div class = "myDiv" style = "padding: 8px; border: 2px; border-color: red;"> почему это не работает? ?

Bir Nepali 02.05.2018 04:43

или Array.from(document.getElementByClassName("myDiv")).forEach(‌​e => e.style.border = "thin solid #0000FF"); для любителей приключений

Jaromanda X 02.05.2018 04:43
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
10
87
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Не существует «document.getElementByClassName» - то, что вам нужно, это document.getElementsByClassName. Он возвращает все элементы в виде массива, соответствующие имени этого класса. Затем вам просто нужно выбрать из массива тот, который вам нужен.

См. Документацию здесь: https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementsByClassName

document.getElementsByClassName("myDiv")[0], document.getElementsByClassName("myDiv")[1] и т. д.
NVRM 02.05.2018 04:38

он фактически возвращает HTMLCollection, который похож на массив, за исключением неперебираемого. Если вы заключите вызов в Array.from(), вы можете перебрать его

LShapz 02.05.2018 04:38

Еще лучше использовать querySelectorAll, который возвращает NodeList, который является может напрямую повторяться в современных браузерах.

CertainPerformance 02.05.2018 04:42

Вы упускаете «s» в названии функции, это getElementsByClassName, но если вы будете использовать getElementById, то это будет без «s».

Ответ принят как подходящий

Первый всего это getElementsByClassName, а не getElementByClassName отсутствует s

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

Совет:querySelectorAll () более полезен, когда вы хотите использовать более сложные селекторы, и имеет отличную совместимость с браузером.

Итак, вы можете попробовать с помощью getElementsByClassName вернуть объект, подобный массиву, всех дочерних элементов, которые имеют все заданные имена классов, и пройти через них, чтобы применить свой стиль css, подобный этому.

<body onload = "myFunction()">

<script>
function myFunction() {
 
  var cols = document.getElementsByClassName('myDiv');
  for(i=0; i < cols.length; i++) {
    cols[i].style.border='thin solid #0000FF';
    linebreak = document.createElement("br");
    cols[i].after(linebreak);
  }
}

</script>

<style type = "text/css">
	.myDiv {
		border: "thick solid #0000FF;"
	}
</style>

<p>&nbsp;</p>
<h1><strong style = "color: #ff0000;">Mechannics</strong></h1>
<div>
<div class = "rawal">
<p>&nbsp;</p>
<div class = "myDiv" style = "padding: 8px;">
<p><span style = "color: #00bcf4;"><strong>1) <u>Units of Measurement</u></strong></span></p>
<p><strong><em>@ K</em></strong><em>ing &nbsp;<strong>H</strong>ector&nbsp; <strong>D</strong>ied &nbsp;<strong>M</strong>ysteriously&nbsp;<strong>D</strong>rinking&nbsp;</em></p>
<span style = "color: #0000ff;"><strong>&nbsp; &nbsp;K</strong>ilo&nbsp;&nbsp;<strong>H</strong>ecto&nbsp; &nbsp;<strong>D</strong>eka &nbsp;<strong>M</strong>eter&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>D</strong>eci&nbsp;&nbsp;&nbsp;&nbsp;</span>
<p>&nbsp;</p>
<p><strong><em>C</em></strong><em>hoklate&nbsp;<strong>M</strong>ilk</em></p>
<span style = "color: #0000ff;"><strong>C</strong>enti&nbsp;&nbsp;&nbsp;&nbsp; Milli</span>
<p>&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;</p>
</div>

<div class = "myDiv">
<p><span style = "color: #00bcf4;"><strong><u>2) Tens ' Multipliers</u></strong></span></p>
<p><strong><em>@ D</em></strong><em>esi&nbsp;</em>&nbsp; &nbsp;<strong><em>H</em></strong><em>ero</em>&nbsp;&nbsp;<strong><em>K</em></strong><em>illed&nbsp;<strong>M</strong>ega&nbsp;<strong>G</strong>igantic&nbsp;<strong>T</strong>errorists</em></p>
<span style = "color: #0000ff;"><strong>&nbsp;&nbsp; D</strong>ekka&nbsp;&nbsp;<strong>H</strong>ecto &nbsp;<strong>K</strong>ilo&nbsp;&nbsp;<strong>M</strong>ega&nbsp;&nbsp;<strong>G</strong>iga&nbsp;&nbsp;&nbsp;&nbsp;<strong>T</strong>era</span>
<p>&nbsp; &nbsp;10<sup>1</sup>&nbsp;&nbsp;&nbsp;&nbsp;10<sup>2</sup>&nbsp;&nbsp;&nbsp;&nbsp;10<sup>3</sup>&nbsp; &nbsp;10<sup>6</sup>&nbsp;&nbsp;&nbsp;&nbsp;10<sup>9</sup>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;10<sup>12</sup></p>
<p>&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;</p>

</div>

Хорошо, я заставлю вас принять ответ из моей другой учетной записи, так как у меня здесь меньше репутации ... Кстати, как я могу использовать здесь тег <br> .. Я добавил строку cols [i] .createElement ("BR") ; внутри функции, но это не сработало.

Bir Nepali 02.05.2018 04:54

попробуйте вот так linebreak = document.createElement("br"); cols[i].appendChild(linebreak);

Always Sunny 02.05.2018 05:01

Это дает мне этот результат ibb.co/cB8bjS, вместо этого я хочу разделить каждое поле, как показано на изображении выше.

Bir Nepali 02.05.2018 05:08

@BirNepali см. Мой отредактированный ответ сейчас. Я использовал метод after() и удалил буквальные теги <br> из вашего html. Запустите фрагмент и убедитесь, что теперь он работает согласно вашим требованиям. Не стесняйтесь проголосовать и принять мой ответ сейчас :)

Always Sunny 02.05.2018 06:08

Идеально, именно то, что мне нужно.

Bir Nepali 02.05.2018 14:18

Я уже голосовал за вас с другого моего аккаунта .. Я проголосую еще раз, когда наберусь достаточно репутации в этом аккаунте.

Bir Nepali 02.05.2018 15:57

Другие вопросы по теме