jQuery: вставьте "" перед последним словом каждого <p> - PullRequest
1 голос
/ 27 апреля 2020

Для типографики c я бы хотел заменить нормальный пробел перед каждым последним словом каждого <p> на &nbsp;.

Возможно ли это сделать с jQuery?

var lastword = str.split(" ").pop();

$("p").(" lastword").replaceWith("&nbsp;lastword");
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam era.</p>
<p>At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.</p>
<p>Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p>
<p>At vero eos et accusam et justo duo dolores et ea rebum.</p>

Буду благодарен за помощь! :)

Ответы [ 2 ]

2 голосов
/ 27 апреля 2020

Для каждого тега <p> получите все его слова, вставьте последнее, объедините их вместе с &nbsp; перед последним словом:

$('p').each(function(){
    var words = $(this).html().split(" ")
    var lastWord = words.pop()
    $(this).html(
        words.join(" ") + '&nbsp;' + lastWord
    )
})
1 голос
/ 27 апреля 2020

Используйте регулярное выражение и сопоставьте \s\b(?=\S+$) (пробел, затем пробелы и конец строки) и замените на &nbsp:

for (const p of $('p')) {
  p.innerHTML = p.innerHTML.replace(/\s\b(?=\S+$)/, '&nbsp');
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam era.</p>
<p>At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.</p>
<p>Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p>
<p>At vero eos et accusam et justo duo dolores et ea rebum.</p>

Или, поскольку jQuery используется только для выбора, можно также отбросить его и использовать querySelectorAll:

for (const p of document.querySelectorAll('p')) {
  p.innerHTML = p.innerHTML.replace(/\s\b(?=\S+$)/, '&nbsp');
}
<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam era.</p>
<p>At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.</p>
<p>Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p>
<p>At vero eos et accusam et justo duo dolores et ea rebum.</p>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...