Пожалуйста, мне нужна помощь в удалении всех пробелов из всех идентификаторов тегов <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>.
Я действительно ценю твою помощь. Спасибо
Но если вы ПРИДЕТСЯ удалите их впоследствии, вы можете сделать это с помощью чистого JavaScript, используя split() и join() как показано здесь.
Пробелы — не единственная ваша проблема... Произвольные строки могут содержать специальные символы (например, одинарные или двойные кавычки) — не очень подходят для идентификаторов, верно? :)



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Эти идентификаторы должны иметь значение форматированный в момент их создания, а не после.
Ваша проблема не только пробелы...
Вы используете произвольные строки в качестве идентификатора, и они могут включать слова со специальными символами, например: 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! Window.load не нужен (здесь мы говорим об элементах DOM). Достаточно разместить теги <script> там, где это уместно (прямо перед закрывающим тегом body). OP должен позаботиться о том, чтобы 1. замена происходила при создании LI 2. или внутри обратного вызова после завершения сценария с созданием LI.
О, да. Извините, я имел в виду document.addEventListener('DOMContentLoaded', function () {}); но ничего, ты прав :)
@Sarah :) да DOMContentLoaded или jQuery($=>{/*doc(ument) you are ready :)*/}) в jQuery. Спасибо
это точно :)
Если вы ссылаетесь на внутренний 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>
The ids are dynamically generated from the title of a podcast rss feeds<-- Вы должны удалить пробел во время этого процесса. Пожалуйста, напишите, как динамически генерируются идентификаторы.