2011-08-04 8 views
11

Bu yüzden bir metin bloğu içeren bir div var, daha önce kullanıcı bu blokta bir metin seçti ve bu seçimden bir aralık nesnesi oluşturdum. Seçilen metnin başlangıç ​​ve bitiş noktalarının ofsetini sakladım ama menzili yeniden oluştururken sorun yaşıyorum (bu yüzden manipüle edebilirim). "quotables", tüm metni tutan div'dir. Ne yaptığımı bilmiyorum.Sadece karakter ofsetlerini bildiğimde nasıl bir aralık nesnesi oluştururum?

 


    var theRange = rangy.createRange(); 
    var node = $('.quotables').html(); 
    theRange.setStart(node, 14); 
    theRange.setEnd(node, 318); 

 

ama alma hataları tutmak: Yakalanmayan Hata: NOT_FOUND_ERR: DOM İstisna 8
m.setStart
(anonim fonksiyonu)
d.extend._Deferred.f.resolveWith
ddextend.ready
dcaddEventListener.y

+1

Bu soruna iyi bir çözüm buldunuz mu? Metin düğümleri boyunca yinelemeli olarak yinelemeye çalışıyorum ve karakterleri sayıyorum, sanki neredeyse oradaymışım gibi hissediyorum ... –

cevap

15

A Aralık sınırı, HTML dizgesinde bir karakter kayması değildir. Bunun yerine, bir DOM düğümünde bir sapmadır. Düğüm bir metin düğümüyse, örneğin, düğüm düğümün metni içinde bir karakter kayması olarak ifade edilir. Düğüm bir elemansa, sınırdan önce düğümün çocuk düğümlerinin sayısı olarak ifade edilir. Örneğin, sınırları | ile gösterilir bir Aralığı aşağıdaki HTML, içinde:

<div id="test">foo|bar<br>|<br></div> 

... model ailesinin başlangıç ​​sınırı, <div> elemanın ilk çocuğu olan metin düğümünde 3 ofset yatıyor son sınır, içinde ofset 2'de yer alırken, sınırdan önce yatan iki alt düğüm (metin düğümü "foobar" ve bir <br> öğesi) vardır. Aralığı şu şekilde programlanırsınız:

var range = rangy.createRange(); // document.createRange() if not using Rangy 
var div = document.getElementById("test"); 
range.setStart(div.firstChild, 3); 
range.setEnd(div, 2); 
+0

Programlı olarak "anlamaya" ihtiyaç duyan düğümleri ve göreceli ofsetleri başlatan ve sonlandıran bir yol var mı? metnin bir dizgisi içindeki karakter ofsetleri? –

+0

@MikeTurley: Bu cevap yardımcı olabilir: http://stackoverflow.com/a/5596688/96100 –

İlgili konular