2017-12-21 166 views
7

Bazıları bana bunu yapmanın en iyi yolu hakkında bilgi verebilir. Ben sonra tüm metin almaya çalışıyorumBelirli bir öğenin (JavaScript veya JQuery) arkasından metin alın

Bu basit olabilir biliyorum "Döküm Ana", ama Noel'den hemen önce beynimde bütün gün toplama duruyor. Bu yüzden kendimi vurgulamak yerine biraz yol göstermeyi düşünürdüm. Bu clone() konteyner etmektir ulaşmak için basit yolu

örnek kod sadece Text in P tag geri getiriyor ama geri Text not in it's own element getirmek istiyorum ve p tag

console.log($("#container").find(".main").next().text());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div id="container"> 
 
    <div class="main"> WOOP IN MAIN </div> 
 
    Text not in it's own element 
 
    <p> Text in P tag </p> 
 
</div>

+0

DOM bu durumda değişmez mi? –

cevap

6

öyle.

const main = document.querySelector('.main'); 
 

 
const txt = [ 
 
    main.nextSibling.textContent.trim(), 
 
    main.nextElementSibling.textContent.trim() 
 
]; 
 

 
console.log(txt)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div id="container"> 
 
    <div class="main"> WOOP IN MAIN </div> 
 
    Text not in it's own element 
 
    <p> Text in P tag </p> 
 
</div>
: Eğer yerli gitmek olsaydı bunu yöntem adından da anlaşılacağı oluyor olarak iki düğüm türleri ve nextElementSibling ait agnostik olduğunu nextSibling bir arada kullanmayı tercih, bir sonraki kardeş elemanı yakalar

+1

neden "const" kullanıyorsunuz? Bu şimdi 'var' sevmemek için yeni bir moda mı? – vsync

+0

'Var' kullanırken, istenmeyen kaldırma ve/veya yeniden atama riskini üstlenirsiniz. Bu Javascript değişkenlerinin üstünde, istenmeyen davranışlara da yol açabilecek dinamik olarak yazılmıştır. Uygun olan yerlerde const’i kullanmak en iyi uygulamadır. Hayır var * doğru * yok. Sadece en az tahmin edilebilir kod tutma meselesi. –

+0

@CarlEdwards Metni kaldırmak için bunu nasıl uyarladınız? –

8

kaldırmak .main elemanından itibaren, aşağıdaki gibi text()'u edinin:

var text = $("#container").clone().find('.main').remove().end().text(); 
 
console.log(text.trim());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div id="container"> 
 
    <div class="main"> WOOP IN MAIN </div> 
 
    Text not in it's own element 
 
    <p> Text in P tag </p> 
 
</div>

Alternatif bir yöntem olarak yinelemeli .main eleman izleyin DOM düğümlerinin gezdirip, ancak bu çok daha karmaşıktır ve aynı sonucu verir. Text not in it's own element bir text düğüm, bu nedenle next() bir HTMLElement olduğunu olma, <p/> etiketi hedefleyecek kabul edildiğinden

+0

Dann, bana onu dövdüğün için haklısın. –

+0

Sen dahi Rory! :) Bana yardım ettiğin için teşekkür ederim. Noel'den önce kendimi strese sokuyordum. –

+1

İyi bir çözüm, ancak BEFORE .main adlı kapsayıcıda içerik olduğunda, bunun da gösterileceğini unutmayın. @Carl Edwards yanıtı bu kısıtlamaya sahip değil – BananasSplitter