W3C uyumlu tarayıcılarda JavaScript Range Object'in html dizesini almanın bir yolu var mı?Aralığı veya DocumentFragmenti dizeye dönüştürme
Örneğin, bize Aşağıdaki kullanıcı seçer diyelim: Hello <b>World</b>
O Range.toString()
yöntemi kullanarak bir dize olarak "Hello World" almak mümkündür.
(Firefox'ta, o. belgesini 'ın getSelection
yöntemini kullanarak da mümkündür) Ama iç HTML almak için bir yol bulmak gibi olamaz.
Bazı aramalardan sonra, aralığın DocumentFragment
Nesnesine dönüştürülebildiğini buldum.
Ancak DocumentFragments
hiçbir innerHTML
özelliğine sahip değildir (en azından Firefox; Webkit veya Opera'yı denemediniz).
Bu benim için garip görünüyor: Seçilen öğelere erişmenin bir yolu olması gerektiği aşikar gibi görünüyor.
Bir documentFragment
oluşturabildiğimi, belge parçasını başka bir öğeye ekleyebileceğimizi ve bu öğenin innerHTML
numarasını aldığımı anlıyorum.
Ancak bu yöntem, seçtiğiniz alan içindeki açık etiketleri otomatik olarak kapatacaktır. Bunun yanında, bir dize olarak elde etmek için dom'a takmaktan daha bariz bir “daha iyi yol” var elbette.
Peki, bir Range veya DocFrag html dizesinin nasıl elde edilir?
aralığı belge fragmanı (ISN' dönüştürüldüğünde uç etiketler oluşturulur t bu doğru mu?). Bununla birlikte, ** geçersiz aralık işaretlemesi içeriyor olsa bile, nodların düğümlere dönüştürülmeden önce hangi aralıkta yer aldığını bulmak mümkün olmalıdır. – SamGoody
Katılmıyorum. Geçersiz işaretleme ayrıştırıldığında, tarayıcı onu ele alır, ancak uygun görür ve DOM'ta, tarayıcının belgenin kendi temsili olan uygun düğümlerini oluşturur. Bu geçersiz işaretleme, daha sonra en azından DOM (JavaScript'in erişebileceği) kadarıyla atılır.DOM'ı bir dize açısından düşünmeyi bırakıp bunu bir ağaç olarak düşünmeye başlamalısınız. Bitiş etiketleri bu ağacın bir HTML dizgisine serileştirilmesinin bir ürünüdür (örneğin, innerHTML ile). Onlar ağacın içindeki varlıklar olarak var olmazlar. –