получить текст, соответствующий тегу внутри - PullRequest
0 голосов
/ 25 октября 2018

Я полностью потерян, чтобы получить это!Это разочаровывает, мне нужна ваша помощь

код:

<div class="sameclass">blablabla</div>

<div class="sameclass"> 
  <h2 id="coucou10">Coucou</h2>
  blablabla 2 html to <br> 
  select this is the text I want<br>
  blabla bla bla bal balbal blabla
</div>

<div class="sameclass">
  <h2 id="coucou20">Coucou</h2>
  blablabla
</div>

Результат, который я хочу:

blablabla 2 html to <br> 
select this is the text I want<br>
blabla bla bla bal balbal blabla

Заранее спасибо, ребята

Ответы [ 4 ]

0 голосов
/ 25 октября 2018

Ваниль JS:

// grab the element with the coucou10 id
const p = document.getElementById('coucou10');

// find its parent node, and then all the childNodes
// make sure they're iterable
const txt = [...p.parentNode.childNodes]

      // filter out elements that aren't text nodes
      .filter(node => node.nodeName === '#text')

      // grab the text content from those nodes
      .map(node => node.textContent.trim())

      // filter out the empty strings
      .filter(txt => txt !== '')

      // join the array of strings
      // (i've used a line break here but remove/add a space instead
      // according to your needs)
      .join('\n');
      
console.log(txt);
<div class="sameclass">blablabla</div>

<div class="sameclass"> 
  <h2 id="coucou10">Coucou</h2>
  <p>d</p>
  blablabla 2 html to <br> 
  select this is the text I want<br>
  blabla bla bla bal balbal blabla
</div>

<div class="sameclass">
  <h2 id="coucou20">Coucou</h2>
  blablabla
</div>
0 голосов
/ 25 октября 2018

решение javascript ...

        var allItems = document.getElementsByClassName('sameclass');
        for(var i=0; i < allItems.length; i++){
            for(var k=0; k < allItems[i].children.length; k++){
                if (allItems[i].children[k].localName == 'h2'){
                    var resettingZero = i + 1;
                    console.log("'sameclass' occurance# "+resettingZero+", we got h2 with the value:" + allItems[i].children[k].innerHTML);
                }
            }

        }
    
    <div class="sameclass">blablabla</div>

    <div class="sameclass"> 
    <h2 id="coucou10">Coucou</h2>
    blablabla 2 html to <br> 
    select this is the text I want<br>
    blabla bla bla bal balbal blabla
    </div>

    <div class="sameclass">
    <h2 id="coucou20">Coucou</h2>
    blablabla
    </div>
0 голосов
/ 25 октября 2018

Вы можете использовать приведенный ниже фрагмент, чтобы получить вывод выше.Если у вас много элементов с классом .sameclass> # coucou10, вы можете использовать их для циклов и выполнить необходимые значения

document.querySelectorAll('.sameclass > #coucou10')[0].parentElement.childNodes.forEach(function(e){if(e.nodeType === 3 && e.textContent.trim().length != 0)console.log(e.textContent.trim())})
<div class="sameclass">blablabla</div>

<div class="sameclass"> 
  <h2 id="coucou10">Coucou</h2>
  blablabla 2 html to <br> 
  select this is the text I want<br>
  blabla bla bla bal balbal blabla
</div>

<div class=">sameclass<">
  <h2 id="coucou20">Coucou</h2>
  blablabla
</div>
0 голосов
/ 25 октября 2018

Вот возможное решение.Контент фильтруется для TEXT_NODE.Вы не получаете элемент <br>.

console.log("Text of element with id(coucou10): " + $('div.sameclass #coucou10').contents().filter(function() {
  return this.nodeType == Node.TEXT_NODE;}).text()
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="sameclass">blablabla</div>

<div class="sameclass"> 
  <h2 id="coucou10">Coucou</h2>
  blablabla 2 html to <br> 
  select this is the text I want<br>
  blabla bla bla bal balbal blabla
</div>

<div class="sameclass">
  <h2 id="coucou20">Coucou</h2>
  okeydokey
</div>
...