2016-08-12 5 views
1
<div class="post-content-container"> 
    <div class="post-content"> 
    Some very long text 
    </div> 
    <button (click)="showMore($event)">Show more</button> 
</div> 

<div class="post-content-container"> 
    <div class="post-content"> 
    Some very long text 
    </div> 
    <button (click)="showMore($event)">Show more</button> 
</div> 

<div class="post-content-container"> 
    <div class="post-content"> 
    Some very long text 
    </div> 
    <button (click)="showMore($event)">Show more</button> 
</div> 

Я хочу добавить класс в post-content после нажатия кнопки. Ну, во-первых, мне нужно найти родителя, верно? Затем я хотел бы найти одного из его детей и добавить к нему собственный класс css.Как найти и добавить класс css одному из детей Div?

showMore(event: any) { 
    let parent = event.target.parentNode; <-- post-content-container 
    //now, how to get into parent's child (I mean post-content) and add to it some custom css class? 
} 

ответ

1

Вы используете Angular2 правильно? В jQuery нет необходимости делать какой-либо пользовательский JavaScript, как в jQuery. Вот как добавить класс «myClass», переключив значение «showMyClass» в ваш компонент, где свойство showMyClass является логическим. Или сделайте «showMyClass» массив логических элементов. Вот полный рабочий пример:

import { Component, NgModule } from '@angular/core' 
import { BrowserModule } from '@angular/platform-browser' 
import { FormsModule } from '@angular/forms'; 

@Component({ 
    selector: 'my-app', 
    template:` 
    <div class="post-content-container"> 
     <div class="post-content" [ngClass]="{myClass: showMyClass[0]}"> 
     Some very long text 1 
     {{showMyClass[0]}} 
     </div> 
     <button (click)="showMore(0, $event)">Show more</button> 
    </div> 

    <div class="post-content-container"> 
     <div class="post-content" [ngClass]="{myClass: showMyClass[1]}"> 
     Some very long text 2 
     {{showMyClass[1]}} 
     </div> 
     <button (click)="showMore(1, $event)">Show more</button> 
    </div> 
    ` 
}) 
export class App { 
    public showMyClass: Array<boolean>; 

    constructor(){ 
     this.showMyClass = []; 
    } 

    showMore(index, event: any) { 
     this.showMyClass[index] = !this.showMyClass[index]; 
    } 
} 


@NgModule({ 
    imports: [ BrowserModule, FormsModule ], 
    declarations: [ App ], 
    bootstrap: [ App ] 
}) 
export class AppModule {} 
+0

Ну, может быть, мой пост не ясен. Может быть несколько контейнеров после содержимого с разделителями постображений, и я не хочу добавлять этот класс ко всем из них. Я хочу добавить этот класс только там, где была нажата кнопка. – elzoy

+0

Я обновил свой ответ с вашими обновленными требованиями :-) Он использует массив булевых для «showMyClass» вместо одного свойства. Не самая лучшая реализация, но она работает, вы получаете эту идею. –

+0

Спасибо. У тебя есть хорошая идея. Я сделал это немного иначе, но также и с использованием индексов. – elzoy

Смежные вопросы