Удалите пробелы из всех идентификаторов тегов <li>

Пожалуйста, мне нужна помощь в удалении всех пробелов из всех идентификаторов тегов <li>. Идентификаторы динамически генерируются из названия RSS-канала подкаста. Как преобразовать все идентификаторы (с пробелами) в следующие теги <li>:

<li id = "The Purpose of Commitment"> ...some content... </li>
<li id = "Take Your Seat"> ...some content... </li>
<li id = "The Power of the Soil"> ...some content... </li>
<li id = "Seasons of Silence"> ...some content... </li>

в идентификаторы (без пробелов). Пример вывода ниже:

<li id = "ThePurposeofCommitment"> ...some content... </li>
<li id = "TakeYourSeat"> ...some content... </li>
<li id = "ThePoweroftheSoil"> ...some content... </li>
<li id = "SeasonsofSilence"> ...some content... </li>

Я искал этот форум и нашел похожие вопросы, заданные здесь: как заменить все пробелы в строке и здесь: заменить все пробелы в строке. Я не знаю, как это сделать с тегами <li>. Я действительно ценю твою помощь. Спасибо

The ids are dynamically generated from the title of a podcast rss feeds <-- Вы должны удалить пробел во время этого процесса. Пожалуйста, напишите, как динамически генерируются идентификаторы.
AndrewL64 12.02.2019 22:28

Но если вы ПРИДЕТСЯ удалите их впоследствии, вы можете сделать это с помощью чистого JavaScript, используя split() и join() как показано здесь.

AndrewL64 12.02.2019 22:41

Пробелы — не единственная ваша проблема... Произвольные строки могут содержать специальные символы (например, одинарные или двойные кавычки) — не очень подходят для идентификаторов, верно? :)

Roko C. Buljan 12.02.2019 23:03
Поведение ключевого слова "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) для оценки ваших знаний,...
2
3
217
4

Ответы 4

Эти идентификаторы должны иметь значение форматированный в момент их создания, а не после.

Ваша проблема не только пробелы...

Вы используете произвольные строки в качестве идентификатора, и они могут включать слова со специальными символами, например: Let's Code → Вы не хочу, чтобы ID был id = "Let'sCode" ← заметили '

Решение?

Замените все, кроме буквы, цифры или подчеркивания (токен регулярного выражения: \W) — с подчеркиванием.

$("li[id]").prop('id', (i, id) => id.replace(/\W/g, '_'));
<ul>
  <li id = "Let's Code"> WARNING! QUOTES! </li>
  <li id = "The Purpose of Commitment"> ...some content... </li>
</ul>

<script src = "//code.jquery.com/jquery-3.3.1.min.js"></script>

Или с помощью ваниль JS:

document.querySelectorAll('li[id]').forEach(el => el.id = el.id.replace(/\W/g, '_'));
<ul>
  <li id = "Let's Code"> WARNING! QUOTES! </li>
  <li id = "The Purpose of Commitment"> ...some content... </li>
</ul>

Отличный ответ. Я протестировал ванильный JS. Возможно, стоит отметить, что JS должен быть внутри чего-то вроде window.onload = function(){}, чтобы он работал. ОП может этого не знать.

Sarah 12.02.2019 22:45

Спасибо @Sarah! Window.load не нужен (здесь мы говорим об элементах DOM). Достаточно разместить теги <script> там, где это уместно (прямо перед закрывающим тегом body). OP должен позаботиться о том, чтобы 1. замена происходила при создании LI 2. или внутри обратного вызова после завершения сценария с созданием LI.

Roko C. Buljan 12.02.2019 22:59

О, да. Извините, я имел в виду document.addEventListener('DOMContentLoaded', function () {}); но ничего, ты прав :)

Sarah 12.02.2019 23:22

@Sarah :) да DOMContentLoaded или jQuery($=>{/*doc(ument) you are ready :)*/}) в jQuery. Спасибо

Roko C. Buljan 13.02.2019 00:32

это точно :)

Sarah 13.02.2019 04:25

Если вы ссылаетесь на внутренний HTML-код родительских элементов и назначаете его переменной js, вы можете использовать метод .replace(), чтобы удалить пробел и переназначить его родительскому элементу.

Возможно, есть лучшие способы сделать это, так как я сам новичок, но я бы погуглил document.getElementbyid().innerhtml.

The ids are dynamically generated from the title of a podcast rss feeds <-- Вы должны удалить пробелы во время этого процесса.


Но если вы ПРИДЕТСЯ удалите их впоследствии, вы можете сделать это с помощью чистого JavaScript, используя простой подход split() и join(), например:

let lists = document.querySelectorAll("#someUl li");
lists.forEach(list => list.id = list.id.split(" ").join(""));

Проверьте и запустите следующий Фрагмент кода для практического примера описанного выше подхода:

/* JavaScript */

let lists = document.querySelectorAll("#someUl li");

lists.forEach(list => list.id = list.id.split(" ").join(""));
<!-- HTML -->
<ul id = "someUl">
  <li id = "The Purpose of Commitment"> ...some content... </li>
  <li id = "Take Your Seat"> ...some content... </li>
  <li id = "The Power of the Soil"> ...some content... </li>
  <li id = "Seasons of Silence"> ...some content... </li>
</ul>

Вы можете сделать это с помощью простого Javascript и регулярного выражения, чтобы заменить любое количество пробелов ничем:

document.querySelectorAll('li').forEach(li => {
  li.id = li.id.replace(/\s*/g, '');
});

Вот пример, который также печатает идентификаторы после преобразования:

document.querySelectorAll('li').forEach(li => {
  li.id = li.id.replace(/\s*/g, '');
});

console.info('ids:');
document.querySelectorAll('li').forEach(li => {
  console.info(li.id);
});
<li id = "The Purpose of Commitment"> ...some content... </li>
<li id = "Take Your Seat"> ...some content... </li>
<li id = "The Power of the Soil"> ...some content... </li>
<li id = "Seasons of Silence"> ...some content... </li>

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