javascript - 如何根据内容将无序列表 <ul> 中的列表项 <li> 添加到其他四个无序列表之间

标签 javascript jquery

我目前有一个动态拉入页面的品牌名称列表,需要根据品牌名称在 4 个列表之间进行分段。例如,一列将包含以数字开头的任何内容。第二列将包含以字母 A 到 H 开头的所有品牌。第三列 I-P。第四列 Q-Z。我目前正在尝试使用 jquery 中的 .map() 函数来遍历列表并将项目拉出并附加到相应的列表,但遇到了一些困难。任何帮助将不胜感激!

(注:不是实际的品牌列表...最终列表中将有大约 50 个品牌。)

这是我的 html:

<div class="brand-directory-body">
  <ul class="brand-directory-list" style="display:none;">
     <li class="brand">37 Signals</li>
     <li class="brand">Apple</li>
     <li class="brand">BMG</li>
     <li class="brand">Cartoon Network</li>
     <li class="brand">Disney</li>
     <li class="brand">ENews</li>
     <li class="brand">Nike</li>
     <li class="brand">Adidas</li>
     <li class="brand">Frito</li>
     <li class="brand">Coke</li>
     <li class="brand">Adobe</li>
     <li class="brand">Hostess</li>
     <li class="brand">Dominoes Pizza</li>
     <li class="brand">Honest Co</li>
     <li class="brand">Z Brand</li>
</ul>
<div class="brand-directory-column">
     <h3 class="column-title">#</h3>
     <ul class="brand-directory-list-num"></ul>
</div>
<div class="brand-directory-column">
     <h3 class="column-title">A-H</h3>
     <ul class="brand-directory-list-ah"></ul>
</div>
<div class="brand-directory-column">
     <h3 class="column-title">I-P</h3>
     <ul class="brand-directory-list-ip"></ul>
</div>
<div class="brand-directory-column">
     <h3 class="column-title">Q-Z</h3>
     <ul class="brand-directory-list-qz"></ul>
</div>

最佳答案

var lists = {
    numbers: [],
    AH: [],
    IP: [],
    QZ: []
};

$('.brand').each(function () {
    var letter = $.text(this).substr(0, 1);

    if ( /\d/.test(letter) ) {
        lists.numbers.push(this);
    }
    else if ( /[a-h]/i.test(letter) ) {
        lists.AH.push(this);
    }
    else if ( /[i-p]/i.test(letter) ) {
        lists.IP.push(this);
    }
    else if ( /[q-z]/i.test(letter) ) {
        lists.QZ.push(this);
    }
});

$('.brand-directory-list-num').append( lists.numbers );
$('.brand-directory-list-ah').append( lists.AH );
$('.brand-directory-list-ip').append( lists.IP );
$('.brand-directory-list-qz').append( lists.QZ );

这是 fiddle :http://jsfiddle.net/q697n/

<小时/>

如果你想让代码稍微写一下DRY呃,您可以将正则表达式存储在 map 对象中:

var lists = {
    numbers: [],
    AH: [],
    IP: [],
    QZ: []
};

var map = {
    numbers: /\d/,
    AH: /[a-h]/i,
    IP: /[i-p]/i,
    QZ: /[q-z]/i
}

$('.brand').each(function () {

    var el = this, letter = $.text(this).substr(0, 1);

    $.each(map, function (key, regex) {
        if ( regex.test(letter) ) {
            lists[key].push(el);
            return false;
        }
    });
});

$('.brand-directory-list-num').append( lists.numbers );
$('.brand-directory-list-ah').append( lists.AH );
$('.brand-directory-list-ip').append( lists.IP );
$('.brand-directory-list-qz').append( lists.QZ );

这是 fiddle :http://jsfiddle.net/q697n/1/

关于javascript - 如何根据内容将无序列表 <ul> 中的列表项 <li> 添加到其他四个无序列表之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17983480/

相关文章:

javascript - 在 Jinja 模板中更改 h1 标签中某个部分的样式

javascript - 使用 Javascript 更改类值

javascript - 如何将 php 变量添加到此 Javascript 中?

javascript - 使用 jquery 获取选定的单选按钮

javascript - Flexbox CSS - 在不影响其他行的情况下增加一个框以适应内容

javascript - 变异观察者: How To Get Current Data From Mutation Record?

javascript - 这在完整功能中不可用

javascript - 从 Android WebView 获取 iframe 数据

javascript - 如何从 JavaScript 上的 Rails 访问环境变量?

javascript - 如何对 cartodb 数据库中 javascript/jquery 生成的查询转义 SQL 查询的单引号?