2016-08-31 8 views
5

jQuery kullanarak tüm blog yazımı tarayacak ve kullanıcı için tahmini okuma süresini hesaplayacak bir işlev uygulamaya çalışıyorum. JQuery'yi kullanarak bir blogdaki tüm sözcükleri saymak için

$('p').each(function(){ 
    var v = wordCount($(this).html()); 
    totalWords = totalWords + v.words; 
); 

function wordCount(val){ 
      var wom = val.match(/\S+/g); 
      return{ 
      charactersNoSpaces: val.replace(/\s+/g, '').length, 
      characters: val.length, 
      words: wom ? wom.length: 0, 
      lines: val.split(/\r*\n/).length 
    } 
} 

wordCount fonksiyonu için bu soru üzerine afiş teşekkür ederim: Word and Character Count using jQuery

yukarıda çalışıyor

Şu anda her paragrafta kelimelerin miktarını almak için şunları yaptık Paragraflarım için beklediğim çıktıyı alıyorum. Ancak benim Blog yayını h1, h2, h3, h4, h5, h6, ul, ol, span, p, li kombinasyonundan oluşur.

Yani böyle kodumu modifiye:

$('p, h1, h2, h3, h4, h5, h6, ul li, ol li, span').each(function(){ 
    var v = wordCount($(this).html()); 
    totalWords = totalWords + v.words; 
}); 

Ama şimdi sonuçları çarpık. Örneğin, bir paragrafta veya bir liste öğesinde span etiketine sahip olsaydım veya her neyse iki kez sayarsa.

Yani örneğin bu Biçimlendirme bunun yerine 9.

<ul> 
     <li>This is a test</li> 
     <li>This is <span>another</span> text</li> 
</ul> 

kimse olası bir düzeltme üzerinde bana tavsiyelerde Can olsun, 8 dönmelidir, orada belli ki benim mantığı bir hata olduğunu ve herhangi bir yardım takdir ediyorum.

Teşekkür

+0

Blog yazınız açıklaması herhangi div herhangi benzersiz bir kimliği olması ile başlar. –

+0

Benim blog yazımın tüm içeriği bir "id" içeren bir sarmalayıcıda bulunur, bu yüzden mantığım sabitlendikten sonra bu sarıcı içindeki tüm elemanları hedeflemek için kelime sayımı – Javacadabra

+3

"text()' yerine "html () '. USE 'var v = wordCount ($ (this) .text());' – Tushar

cevap

6

Kullanım text() elemanın textContent alır. html() kullanılırsa

var v = wordCount($(this).text()); 

, elemanlar, örneğin, <h1> ve </h1> kelime olarak sayılacaktır.

+0

Merhaba @Tushar Cevabınız için teşekkür ederim, bahsettiğiniz gibi güncelledim ama hala aynı sonucu alıyorum - iç içe geçmiş elemanlar iki kez sayılıyormuş gibi görünüyor – Javacadabra

+2

@Javacadabra Ana madde kabı seçicisi olarak geçmeniz gerekiyor her yuvalanmış eleman ve btw değil, (bazı durumlarda) kırpmalısınız: var v = wordCount ($ (this) .text(). trim()); –

+1

@Javacadabra 'p' seçicisi olarak kullanılır İç içe paragraf öğeleri varsa, kod iki kez çalışır. Diğer yorumlarda belirtildiği gibi belirli eleman seçiciyi kullanın. – Tushar

İlgili konular