У меня есть 2 массива с одинаковым количеством ключей. Я хотел бы пройтись по первому массиву, а затем найти в тегах <p> любые совпадающие значения. Затем, если совпадение найдено, я хотел бы заменить это совпадающее значение соответствующим значением из 2-го массива.

У меня пока есть:

var text_original = ["original_word1", "original_word2", "original_word3"];
var text_replaced = ["replaced_word1","replaced_word2","replaced_word3"];
var z;

for (z = 0; z <= text_original.length; ++z) {
  $("p").each(function(){
    var text=jQuery(this).html();
    $(this).html(text.replace(text_original,text_replaced));
  });
}

Это общая идея, я не понимаю, как изолировать отдельные значения от нескольких значений массива. Заранее благодарим за помощь!

0
Rob Myrick 13 Мар 2018 в 22:19

2 ответа

Лучший ответ
  • Вы пропустили echo перед json_encode().
  • Ваш json_encode() не следует заключать в кавычки.
  • Вы должны использовать [z] для доступа к элементу массива.

Код:

var text_original = <?php echo json_encode($text_original); ?>;
var text_replaced = <?php echo json_encode($text_replaced); ?>;
var z;
for (z = 0; z <= text_original.length; ++z) {
    $("p").each(function(){
        var text=jQuery(this).html();
        $(this).html(text.replace(text_original[z],text_replaced[z]));
    });
}
1
Syscall 13 Мар 2018 в 19:28
  • Воспользуйтесь функцией indexOf и проверьте найденный текст.
  • Используйте функцию text вместо функции html.
var text_original = ["original_word1", "original_word2", "original_word3"];
var text_replaced = ["replaced_word1", "replaced_word2", "replaced_word3"];

$('p').each(function() {
  var text = $(this).text();
  
  var index = text_original.indexOf(text);
  if (index > -1) $(this).text(text.replace(text_original[index], text_replaced[index]));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>original_word1</p>
<p>original_word2</p>
<p>Ele from SO</p>

Почему $.text()?

HTML-элемент <p> представляет собой абзац текста. Абзацы обычно представляются на визуальных носителях как блоки текста, которые отделены от соседних блоков вертикальным пустым пространством и / или отступом первой строки. Абзацы являются элементами блочного уровня.

Функция $.text() вернет текст без тегов HTML.

2
Ele 13 Мар 2018 в 19:42