【问题标题】:Trying to select previous li element of selected li element of ul试图选择 ul 的选定 li 元素的前一个 li 元素
【发布时间】:2019-08-15 00:58:30
【问题描述】:

我正在迭代列表项,我想要实现的是在活动 li(思维导图 3)之前(摘要 2)的元素上没有边框,如 图像所示 它总是为无序列表中的每个元素分配边框,我写了这个 if 条件,它说将边框分配给索引小于无序列表长度的所有 li 项,而不是选定的 li 之前的元素,但它也将左边界分配给在我们的例子中是 summary 2 的那个元素。我认为 if 条件有问题,但我无法弄清楚是什么?

<ul class="nav nav-tabs">
  <li *ngFor="let tab of tabs; let i = index" (click)="selectTab(tab)" 
      [class.active]="tab.active"
      [class.border]="(i < tabs.length - 1) && !(tabs[i+1]?.active)">
    <div>
      <div>
        <img class="icon" style="width: 18px;"
             src="../../../assets/icons/{{tab.icon}}.svg">
       {{tab.title}} {{i}}
    </div>
    </div>
  </li>
</ul>

Css定义如下。

.active {
  border: 1px solid #eaeef0;;
  border-radius: 4px 4px 0 0;
  border-bottom: 1px solid white;
  margin-bottom: -6px;
  height: 44px;
}

.border {
  border-right: 1px solid red;
}

【问题讨论】:

  • 我们能看到.active.border的css定义吗?
  • @chris.va.rao 编辑了问题,css def。添加:)

标签: javascript css angular ngfor string-interpolation


【解决方案1】:

我认为你不需要选择之前的li 元素来移除边框。只需设置左边框而不是右边框并修改您的 CSS,如下所示。

li {
    border-left: 1px solid red;
}

li:nth-child(1) {
    border-left:none; /*First element should not have a left border*/
}

li.active {
    border-left: none;/*Border definition for active element*/
}

【讨论】:

  • 我认为你没有清楚地理解这个问题,我不想在所选元素的前一个元素上拥有右边框,所以在我们的案例中,摘要 2 是前一个 el,而思维导图是当前一。
  • @DivyanshuRawat 我确实理解你的问题,我觉得你的实现需要改变。而不是删除以前的右边框,为什么不设置当前的左边框?您的 CSS 需要更改。给我们一个在线代码,我会修复它
猜你喜欢
  • 2021-07-03
  • 2019-02-05
  • 1970-01-01
  • 2022-01-25
  • 1970-01-01
  • 2012-08-12
  • 2015-04-01
  • 1970-01-01
  • 2015-04-08
相关资源
最近更新 更多