В директиве angularjs я хочу найти идентификатор в HTML и добавить к нему класс

У меня есть HTML-код с идентификатором "# collapse1", где числовые значения генерируются динамически. Я хочу найти этот конкретный идентификатор при загрузке страницы и добавить к нему класс.

Мой код директивы

app.directive('mainSidebar',
  ['$localStorage','$rootScope',function($localStorage,$rootScope){
    return{
        restrict : 'AEC',
        transclude :  true,
        controller : 'SidebarController',
        templateUrl : 'app/sidebar/sidebar.html',
        link: function(scope, element, attrs) {
          element.find('#collapse1').addClass("panel-collapse collapse in");
        }
    }
}])

Буду рад, если вы поможете мне написать правильный код, чтобы найти и добавить к нему класс.

Какой элемент в функции link? Объект jquery?

amicoderozer 31.05.2018 11:48

Совершенно уверен, что так и должно быть: element[0].getElementById("collapse1").addClass("panel-colla‌​pse") также метод .addClass принимает один класс за раз, если я не ошибаюсь.

Adrian 31.05.2018 11:57

Можете ли вы включить шаблон своей директивы

Senal 31.05.2018 11:58

@ Adriani6 нет правильного синтаксиса addClass. Он принимает более одного элемента, разделенных пробелом (api.jquery.com/addclass).

amicoderozer 31.05.2018 12:00

@amicoderozer Вы правы, но это больше не объект jQuery.

Adrian 31.05.2018 12:02

@ Adriani6 да, я тоже подозреваю, потому что синтаксис jQuery правильный

amicoderozer 31.05.2018 12:04

@amicoderozer Это одна из причин, по которой вы не должны использовать jQuery вместе с Anuglarjs, кроме очевидных проблем цикла дайджеста Angularjs после манипуляций с DOM.

Adrian 31.05.2018 12:08
Поведение ключевого слова "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
7
52
3

Ответы 3

Ты можешь использовать

element[0].getElementById("collapse1").addClass("panel-collapse collapse in");

или же

document.getElementById("collapse1").addClass("panel-collapse collapse in");

Метод addClass - это метод jQuery. Необработанный элемент DOM необходимо преобразовать в элемент jQuery.

georgeawg 31.05.2018 12:42

В фреймворке AngularJS используйте директиву ng-class для добавления и удаления классов:

<div id = "collapse" ng-class = "{'panel-collapse': addClass,
                              'collapse': addClass,
                              'in': addClass}" >
</div>

<button ng-click = "addClass = !addClass">
    {{addClass ? 'Remove' : 'Add' }}
</button>

Для получения дополнительной информации см. Справочник по API директивы AngularJS ng-class.

Если вы также не загрузили JQuery в свой проект, element.find('#collapse1') не будет работать, потому что JQLite не может найти на основе идентификаторов, потому что это ограничено именем тега.

Однако вы можете захватить свой элемент с помощью функции DOM и обернуть его в элемент AngularJS.

angular.element(document.getElementById('collapse1')).addClass("panel-collapse collapse in");

P.S. Ответ georgeawg является предпочтительным подходом, но предполагается, что у вас есть контроль над этим HTML, чтобы добавить к нему ng-class, поэтому я отправил альтернативный ответ.

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