gpt4 book ai didi

javascript - 如果另一个元素不存在,则 Angular 创建元素

转载 作者:行者123 更新时间:2023-11-28 07:21:38 25 4
gpt4 key购买 nike

我有一个州列表(佛罗里达州、阿拉巴马州...),我想在第一个字母第一次出现的上方创建命名 anchor 。

信件链接

  <nav>
<ul class="letters">
<li ng-repeat="letter in locations.getLetters()">
<a href="#{{letter}}">{{letter}}</a>
</li>
</ul>
</nav>

     <nav>
<ul class="locations">
<li ng-repeat="state in locations.states">{{state.state}}
<a ng-if="" id="{{state.state.charAt(0)}}">fgsdf</a>
<ul>
<li ng-repeat="city in state.cities">
<a href>{{city.name}}</a>
</li>
</ul>
</li>
</ul>
</nav>

我被困在<a ng-if="" id="{{state.state.charAt(0)}}">fgsdf</a>

我已经尝试过ng-if="!document.getElementById(state.state.charAt(0))"但这是行不通的。有人对我应该如何解决这个问题有任何建议吗?

更新

我考虑过使用 Angular 的内置过滤器来过滤 ngRepeat 中的状态。当用户单击A时,仅应显示以 A 开头的状态。这似乎是一种更干净、更直观的方法,并将改善用户体验。

最佳答案

您可以尝试这种方法

假设您的输入是一个简单的字符串数组。在将其放入 Controller 之前,我们可以使用一个简单的对象按每个状态的第一个字母对状态进行分组(字母是键,值是字符串数组)

http://jsfiddle.net/q2y93ym7/1/

html:

<body ng-app="HelloApp" ng-controller="Controller" class="container"> 
<div class="well">
<a href="#{{letter}}" ng-repeat="(letter,states) in letters">{{letter}} </a>
</div>

<div ng-attr-id="{{letter}}" ng-repeat="(letter,states) in letters">
<h1>{{letter}}</h1>
<h2 ng-repeat="state in states">{{state}}</h2>
<hr>
</div>
</body>

js:

angular.module('HelloApp', [])
.controller('Controller', function ($scope) {
var states = ['Alabama', 'Alaska', 'Arizona', 'Arkansas', 'California', 'Colorado', 'Connecticut', 'Delaware', 'Florida', 'Georgia', 'Hawaii', 'Idaho', 'Illinois Indiana', 'Iowa', 'Kansas', 'Kentucky', 'Louisiana', 'Maine', 'Maryland', 'Massachusetts', 'Michigan', 'Minnesota', 'Mississippi', 'Missouri', 'Montana Nebraska', 'Nevada', 'New Hampshire', 'New Jersey', 'New Mexico', 'New York', 'North Carolina', 'North Dakota', 'Ohio', 'Oklahoma', 'Oregon', 'Pennsylvania Rhode Island', 'South Carolina', 'South Dakota', 'Tennessee', 'Texas', 'Utah', 'Vermont', 'Virginia', 'Washington', 'West Virginia', 'Wisconsin', 'Wyomin'];

// Let's prepare the input

var letters = $scope.letters = {};
states.forEach(function (state) {
var letter = state.charAt(0);
if (!letters[letter]) {
letters[letter] = [];
}

letters[letter].push(state);
});

})
<小时/>

编辑:

  • 正如 @DRobinson 所说,没有任何东西可以保证对象的键会被排序。因此您可以尝试使用 this great approach/使用数组代替对象
  • 已添加<h1>{{letter}}</h1> ,谢谢@Tony

关于javascript - 如果另一个元素不存在,则 Angular 创建元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30248679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com