Как извлечь жирный текст из тега <b> с помощью jQuery

У меня есть некоторый (плохой) HTML, который я пытаюсь очистить, который выглядит так

<div class="MsoNormal" style="text-align: justify;">
 <span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">
 <span style="color: #c00000;">"<i style="mso-bidi-font-style: normal;">Book Name</i>" by 
 <b style="mso-bidi-font-weight: normal;">AUTHOR</b>. Release Date: 
 <b style="mso-bidi-font-weight: normal;">DATE</b>. Published by 
 <b style="mso-bidi-font-weight: normal;">PUBLISHER</b>
</div>

Мне нужно выделить три вещи, выделенные жирным шрифтом: АВТОР, ДАТА И ИЗДАТЕЛЬ

Я пробовал такие вещи, как $('strong,b').each(...) но это дает весь текст.

Изменить: вот частичный код, который я использую, в основном, что я хочу сделать, это получить все детали из набора таких элементов.

$(".MsoNormal").each(function(index) {

   var book = {}
   var elem = $(this).text()

   elem = sanitizeString(elem) // Removes whitespaces and line breaks

   book["title"] = getTitle(elem) // Gets the book name, which is between double quotes

   //Get author,date & publisher here $('b') traverses everything again

 }
 })

2 ответа

Решение

Использование map функционировать как в примере ниже. get Метод вернет массив, и тогда у вас будет свобода делать что угодно с этой информацией.

var text = $("b").map(function() {
  return $(this).text();
}).get();

alert(text);
alert("Bold text: " + text.join(" "));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="MsoNormal" style="text-align: justify;">
  <span style="font-family: Georgia,&quot;Times New Roman&quot;,serif;">
 <span style="color: #c00000;">"<i style="mso-bidi-font-style: normal;">Book Name</i>" by 
 <b style="mso-bidi-font-weight: normal;">AUTHOR</b>. Release Date: 
 <b style="mso-bidi-font-weight: normal;">DATE</b>. Published by 
 <b style="mso-bidi-font-weight: normal;">PUBLISHER</b>
</div>

Просто используйте $('b') селектор:

$('b').each(function(index, element) {
    console.log(element.textContent);
});

Или, если вы хотите сохранить их в массиве, вы можете использовать .map метод:

var bold_words = $('b').map(function() { return this.textContent });

console.log(bold_words);
// ["AUTHOR", "DATE", "PUBLISHER"]
Другие вопросы по тегам