Преобразование текста привязки в элемент списка

У меня есть якорный текст, который я хочу разделить и преобразовать в элементы списка (маркеры)

Здесь я использую jquery для получения текста конкретных якорей:

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

console.info(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 см
  • Magnetisch

Надеюсь, кто-нибудь сможет мне помочь, потому что я действительно не знаю, как разделить струну. Логичнее всего разбить его по первому номеру и тире -.

Я попытался разбить его вот так:

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

что приводит к массиву текста с разделенным последним словом следующим образом:

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

и массив со всеми числами, разделенными следующим образом:

0:80
1:110

Но как мне сделать красивое разделение, чтобы мне не приходилось объединять этот вывод.

ваше соглашение об именах непоследовательно, поэтому я не думаю, что это возможно, лучше, если вы сделаете это на стороне сервера

madalinivascu 01.08.2018 11:38

Может быть, вы не знаете, как это сделать, но вам нужно что-то попробовать. Покажите нам свою попытку. Попробуйте что-нибудь с String.split ().

Jeremy Thille 01.08.2018 11:38

Вы можете разделить с помощью регулярного выражения. Но поскольку у вас непоследовательный результат, трудно добиться

Dennis 01.08.2018 11:39

@madalinivascu это невозможно, потому что это тест AB, который я делаю с помощью диспетчера тегов Google.

Sireini 01.08.2018 11:58

Кто-нибудь знает решение?

Sireini 01.08.2018 13:10
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
5
64
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

console.info(main_array);

main_array будет иметь строку, используйте синтаксис индекса для доступа к требуемой строке.

Это никак не помогает. Прочтите еще раз и сравните, что хочет OP и что делает ваш фрагмент.

Dan 01.08.2018 11:50

вывод не согласован. его трудно достичь

Kaleem Nalband 01.08.2018 11:55

Да, мы это знаем. Об этом уже говорилось в сообщении OP, но то, что вы опубликовали, не является решением проблемы OP. Вы просто показываете, как разделить струну.

Dan 01.08.2018 11:57

возможно ли иметь какой-либо разделитель в теге 'a', чтобы мы могли разделить его с помощью разделителя, например, "|".

Kaleem Nalband 01.08.2018 12:11

@KaleemNalband, что вы имеете в виду, я не могу редактировать строку, это то, что я получил с веб-сайта. Мы можем отредактировать это потом

Sireini 01.08.2018 12:58

@KaleemNalband вы знаете какое-нибудь решение?

Sireini 01.08.2018 13:10

@KaleemNalband ознакомьтесь с моим решением

onyx 01.08.2018 14:35

@onyx отлично смотрится!

Kaleem Nalband 01.08.2018 14:39
Ответ принят как подходящий

Вы можете добиться этого с помощью 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, поэтому вы, вероятно, захотите использовать транспилировать в обычном javascript для совместимости.

Другие вопросы по теме