将锚文本转换为列表项

时间:2018-08-01 09:34:40

标签: javascript jquery

我有一个锚文本,我想将其拆分并转换为列表项(项目符号)

在这里,我使用jquery来获取特定锚点的文本:

var productDetails = $('.product-info .product-name').find('a');

console.log(productDetails.text());

将显示以下列表:

Whiteboard 80x110 cm - Magnetisch
Whiteboard 60x90 cm - Magnetisch
Whiteboard 60x90 cm - Magnetisch / Emaille
Whiteboard 90x120 cm - Magnetisch / Emaille
Skin Whiteboard 75x115 cm - Wit
Skin Whiteboard 75x115 cm PRO - Polyester coating
Frameless whiteboard - Rechte hoeken - 58x88 cm
Frameless whiteboard - Rechte hoeken - 78x108 cm
Frameless whiteboard - Rechte hoeken - 88x118 cm
Frameless whiteboard - Rechte hoeken - 88x178 cm

如何将它们分为以下内容:

  • 白板
  • 80x110厘米
  • 强磁法

希望有人可以帮助我,因为我真的不知道如何分割字符串。最合乎逻辑的是将其分割为第一个数字和-破折号。

我试图像这样分割它:

console.log(productDetails.split("-"), productDetails.match(/\d+/g).map(Number));

这将导致文本数组的最后一个单词被分割成这样:

0:" Whiteboard 80x110 cm "
1:" Magnetisch                Whiteboard 60x90 cm "

和一个数组,其中所有数字的拆分方式如下:

0:80
1:110

但是如何进行一个很好的拆分,以使我不必合并此输出。

2 个答案:

答案 0 :(得分:1)

您可以使用regular expression和字符串split来实现。因为您的数据不一致,所以没有一种干净的方法可以做到这一点。一种方法是例如

 1. Split the output on the dimension, i.e. `58x88 cm`
 2. Remove all white spaces and dashes
 3. Concat the result

这是示例代码

var input = [
    'Whiteboard 80x110 cm - Magnetisch',
    'Whiteboard 60x90 cm - Magnetisch',
    'Whiteboard 60x90 cm - Magnetisch / Emaille',
    'Whiteboard 90x120 cm - Magnetisch / Emaille',
    'Skin Whiteboard 75x115 cm - Wit',
    'Skin Whiteboard 75x115 cm PRO - Polyester coating',
    'Frameless whiteboard - Rechte hoeken - 58x88 cm',
    'Frameless whiteboard - Rechte hoeken - 78x108 cm',
    'Frameless whiteboard - Rechte hoeken - 88x118 cm',
    'Frameless whiteboard - Rechte hoeken - 88x178 cm',
];

function trimCharacters(s) {
    return s.replace(/^(\s|-)+|(\s|-)+$/g, '')
}

function bulletList(text) {
    if (!text) {
        return;
    }
    var items = text.split(/(\d+x\d+ cm)/).filter(Boolean).map(x => trimCharacters(x));
    if (items.length === 3) {
        return items;
    }
    var res = items[0].split('-').map(item => trimCharacters(item));

    return [res[0], items[1], res[1]];
}

input.forEach(text => {
    var data = bulletList(text);
    var list = $('<ul></ul>');
    
    data.forEach(item => {
        list.append(`<li>${item}</li>`);
    });

    $('.data-list').append(list);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="data-list"></div>

注意:由于您的数据不一致,因此该代码仅适用于提供的模式。
此外,这段代码是用Ecmascript编写的,因此您可能希望将其 transpile 转换为普通javascript以实现兼容性。

答案 1 :(得分:0)

var main_array=[];
$('.product-info .product-name a').each(function(){
var array=$(this).text().split(" ");
main_array.push(array);
});

console.log(main_array);

main_array将具有字符串,使用索引语法访问所需的字符串。

相关问题