2017-09-17 8 views
-1

を持つすべてのHTML要素を選択します。私は、HTML文書を持っているテキスト

実際の状況では、実際のHTML構造はわかりませんが、ラッパーを除いてテキストを含むすべての要素を選択する方法が必要です。

jqueryなしで、バニラウェイヘルプが必要です。

+0

あなたは、コードを自分で書くことができます**。 ** [もっと研究をして](// meta.stackoverflow.com/questions/261592)**あなたが問題を抱えていると、あなたが試みたものを投稿することができます** t作業**を提供し、** [最小、完全、および検証可能な例](// stackoverflow.com/help/mcve)**を提供します。 – Rob

答えて

0

コンテナを取得してからすべての子を取得し、それらの子をフィルタリングする必要があります。これが実稼働環境に移行している場合は、エラーチェックを行い、それらの要素のどれもがnull、未定義またはその他の悪い値を返さないようにします。ここ

var container = document.querySelector('.content'), 
 
    allKids = container.querySelectorAll('*'), 
 
    kidsWithContent = Array.from(allKids).filter(item => item.textContent.length !== 0); 
 
    
 
console.log(kidsWithContent);
<div class="blog"> 
 
    <div class="image"></div> 
 
    <div class="content"> 
 
    <p class="text"> Some text </p> 
 
    <div class="date">23.12</div> 
 
    <p></p> 
 
    <div></div> 
 
    </div> 
 
</div>

+0

問題は - 私は親要素のHTML構造を知らないので、ラッパー要素( '.content')を選択できません。 –

+0

OK、 'container'はあなたが気づいている最も高い要素を使います。しかし、これにより、大きな文書でクエリが遅くなることがあります。 – colecmc

1

//first select the container 
 
var container = document.body, 
 
    //then all nodes 
 
    elems = container.getElementsByTagName("*"), 
 
    len = elems.length, 
 
    elem, 
 
    elemText, 
 
    i, 
 
    //we assign unnecessary elements 
 
    unwanted = ["script", "images", "imput"]; 
 
//a normal loop 
 
for(i=0;i<len;i+=1){ 
 
    elem = elems[i]; 
 
    //pay attention here 
 
    //if the element does not have children it means that it will only contain text 
 
    if(unwanted.indexOf(elem.nodeName.toLowerCase())=="-1"){ 
 
    if(!elem.children.length){ 
 
     //you also have to check that the text exists 
 
     elemText = elem.innerText; 
 
     if(elemText){ 
 
     //and finally 
 
     console.log(elem, elemText); 
 
     } 
 
    } 
 
    } 
 
}
<div class="blog"> 
 
    <div class="image"></div> 
 
    <div class="content"> 
 
    <p class="text"> Some text </p> 
 
    <div class="date">23.12</div> 
 
    </div> 
 
</div>

+0

@VladimirHumeniukようこそ、私は何かを追加しました。 :) – AvrilAlejandro

0

別の方法(クラスtextdateを含む要素を仮定)

var coll = document.querySelectorAll(".text, .date"); //Get HTML elements having class .text and .date 
 
var elements = [].slice.call(coll); //Convert to array 
 
elements.map(function(el,i) { console.log(el.innerHTML.trim()) }); //Display element innerHTML using `map` function
<div class="blog"> 
 
    <div class="image"></div> 
 
    <div class="content"> 
 
     <p class="text"> Some text </p> 
 
     <div class="date">23.12</div> 
 
    </div> 
 
</div>
あります

関連する問題