Как я могу получить соседа элемента html в javascript?

Пример html:

<div class = "container" id = "neighbor-color-div">
        <button id = "change-neighbour-color" onclick = "change_neighbor_color()">Change my 
        neighbour color!</button>
        <button id = "neighbour">Click the other button!</button>
</div>
<script src = "./main.js" defer></script>

Пример main.js:

function change_neighbor_color() {
 ...
}

Я не знаю, как это сделать, но после того, как я нажму кнопку «Изменить цвет соседа», цвет текста другой кнопки должен измениться на синий.

Спасибо за помощь.

Поведение ключевого слова "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) для оценки ваших знаний,...
2
0
1 340
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Общий способ

Вы можете передать при вызове функции ссылку на кнопку, которая вызывает функцию с помощью this

 <button id = "change-neighbour-color" onclick = "change_neighbor_color(this)">

Затем у вас есть ссылка на вызываемый элемент кнопки e.target;

  • Тогда получите все свои кнопки с querySelectorAll()
  • прокрутите все кнопки и проверьте, по какому индексу находится кнопка, вызвавшая функцию, сравнив ее идентификатор.
  • Лучше всего, если ваши кнопки, которые вы хотите использовать, имеют одинаковые имена классов.

Тогда вашим соседом будет кнопка с индексом +1

        function change_neighbor_color(e) {
           let index;
           let nodes = document.querySelectorAll(".btn");
           nodes.forEach((n, ind) => {
           if (n.id === e.id){
           index = ind;
           }
           })
           
           if (index !== undefined && index !== null){
              nodes[index+1].style.color = "blue";
            }else{
           console.info("NO NEIGHBOUR FOUND");
            }

 
            }
     <div class = "container" id = "neighbor-color-div">
                    <button id = "change-neighbour-color" class = "btn" onclick = "change_neighbor_color(this)">Change my 
                    neighbour color!</button>
                    <button id = "neighbour" class = "btn">Click the other button!</button>
            </div>
            <script src = "./main.js" defer></script>

Не общий способ Получите доступ к элементу neighbour по его id и задайте ему синий цвет с помощью .style.color

document.getElementById("neighbour").style.color = "blue";

    
    function change_neighbor_color() {
document.getElementById("neighbour").style.color = "blue";
}
<div class = "container" id = "neighbor-color-div">
        <button id = "change-neighbour-color" onclick = "change_neighbor_color()">Change my 
        neighbour color!</button>
        <button id = "neighbour">Click the other button!</button>
</div>
<script src = "./main.js" defer></script>

Хотя это работает, я совершенно уверен, что хотелось более общего подхода. Как я могу получить соседа элемента html в javascript?

JavaScript 14.12.2020 10:47

Хорошее имя @JavaScript. Для более общего способа вы можете использовать имена классов и querySelectorAll, а затем соседние нужные элементы находятся в индексе [elementIndex -1] [elementIndex +1]

Aalexander 14.12.2020 10:50

Помните о втором предложении с использованием setAttribute(), которое удалит все существующие встроенные стили. Если вам также нужны стили в разметке, их комбинация будет более стабильной.

Lain 14.12.2020 10:52

Как бы вы их объединили?

Aalexander 14.12.2020 10:59

Сначала вы назначаете свойство, а затем устанавливаете атрибут, используя style.cssText. Кроме того, вы можете просто добавить класс, что в настоящее время является обычной практикой.

Lain 14.12.2020 11:06

но разве первое решение не является правильным способом сделать это в oneliner?

Aalexander 14.12.2020 11:35

Я добавил общее решение. Там я передаю ссылку на вызываемую кнопку.

Aalexander 14.12.2020 11:56
Ответ принят как подходящий
function change_neighbor_color() {
 document.getElementById('neighbour').style.color= 'blue';
}

Почему вы меняете его на красный?

Aalexander 14.12.2020 08:53

И запрашивается цвет текста, а не цвет фона

Aalexander 14.12.2020 08:53

исправил ответ, спасибо

fullstack 14.12.2020 08:55

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