Javascript нужно вставить в абзац символ

398
29 марта 2018, 10:26

Всем привет, у меня такая ситуация. Я имею текст:

<p>Loremasdadasdasd</p>
<p>Loremasdasdasd</p>
<p>loremadasdasdasd</p>
<p>asdasdasdasdasda</p>

Мне нужно, на каждый четный абзац вставлять символ {{id}}

Я это сделал так:

 var ids = [];
 var selRel = function(id) {
     ids.push(id);
     let newStr = jQuery('#ed_ru')
         .val()
         .split("<p>")
         .filter(el => !el.match(/\{\{(\d{1,8})\}\}/))
         .map((el,it) => {
            return (it == 2) ? '{{'+id+'}}' + el : el
         })
         .join('<p>');
         jQuery('#ed_ru').val(newStr);
         let newStrMd = jQuery('#ed_md')
                        .val()
                        .split("<p>")
                        .filter(el => !el.match(/\{\{(\d{1,8})\}\}/))
                        .map((el,it) => {
                           return (it % 2 == 0) ? '{{'+ids[it]+'}}' + el : el
                        })
                        .join('<p>');
                        jQuery('#ed_md').val(newStrMd);
   };

Но у меня есть проблемы, во-первых, он не вставляет на четные абзацы символ {{id}}. Во-вторых обрезается текст. Как поправить? Сами абзацы берутся из input type hidden.

  • Также символы типа {{}} не вставляются иногда в параграфы.

UPDATE

У меня есть массив:

var ids = ['212341', '2313213', '323134', '213132'];

Мне нужно, чтобы на каждый четный абзац шло уникальное значение из этого массива, как это можно сделать?

Answer 1

Как-то так, если я правильно понял.

var add = function(id) { 
  $('p').each(function(i) {  // Для каждого параграфа 
    if ((i + 1) % 2 == 0)    // Если индекс кратный 2...  
      $(this).append('{{' + id + '}}'); // То добавляем текст 
  }); 
}; 
 
add('id');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<p>1</p> 
<p>2</p> 
<p>3</p> 
<p>4</p>

Answer 2

превратите ваш кусок html-строки в jquery объект и работайте с ним как обычно.

var ids = ['99999', '2313213', '323134', '213132']; 
 
var data = $("#x").val(); 
var m = null; 
 
var regex =  /{{(\d{1,8})}}/g; 
while( m = regex.exec(data) ){   
   var idx = ids.indexOf(m[1]); 
   if(idx >= 0){ 
       ids.splice(idx, 1); 
   } 
} 
 
 
var $data = $(data).wrapAll("<div></div>").parent(); 
 
  $data.find("p") 
       .filter(function(i,v){ 
          return (i % 2 == 0) && !(regex.test($(v).text())); 
       }) 
       .slice(0, ids.length) 
       .each(function(i,v){           
           $(v).prepend('{{' + ids[i] + '}}');  
        });    
   
  console.log($data.html());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input id="x" type="hidden" value="<p>Loremasdadasdasd1</p> 
<p>Loremasdasdasd2</p> 
<p>{{99999}}loremadasdasdasd3</p> 
<p>asdasdasdasdasda4</p> 
<p>loremadasdasdasd5</p> 
<p>asdasdasdasdasda6</p> 
"/>

READ ALSO
Замена PDF путём смены src в тэге &lt;embed&gt;

Замена PDF путём смены src в тэге <embed>

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

182
React. Objects are not valid as a React child (found: object with keys {slide})

React. Objects are not valid as a React child (found: object with keys {slide})

Добрый деньПолучаю ошибку рендера в следующей ситуации

182
Как сделать прелоадер для сайта?

Как сделать прелоадер для сайта?

Стандартный способ это подгрузить мини блок и стили для него, в потом скрытьДля этого устанавливается таймер

177