CharacterData#
CharacterData.insertData()#
Metoda insertData()
dodaje nową treść w określonym miejscu danych tekstowych skojarzonych z danym węzłem znakowym.
Opis działania#
Samo wywołanie i poszczególne jego części najlepiej objaśnić na zapisie składniowym:
node.insertData(offset, data);
gdzie poszczególne człony oznaczają:
- node - węzeł znakowy będący obiektem kontekstu.
- offset - liczba całkowita określająca przesunięcie, od którego nowa treść (kolejne znaki) będzie dodawana do danych tekstowych
- data - łańcuch znakowy reprezentujący nową treść dodawaną w określonym miejscu aktualnych danych tekstowych.
Algorytm wywołania metody insertData(offset, data)
nie jest skomplikowany. Dla lepszego zrozumienia tematu prezentuję go w całości:
- Zwróć wynik zastępowania danych tekstowych z węzłem będącym obiektem kontekstu, przesunięciem wskazywanym przez offset, licznikiem będącym wartością
0
oraz danymi tekstowymi wskazywanymi przez data.
Identyczny efekt uzyskamy poprzez wywołanie metody CharacterData.replaceData(offset, count, data)
z argumentami o następujących wartościach:
- offset - liczba całkowita określająca przesunięcie, od którego część danych tekstowych (kolejne znaki) będzie zastępowana nowymi danymi tekstowymi.
- count - licznik ustawiony na wartość
0
. - data - nowe dane tekstowe.
Warto nadmienić, że w obu przypadkach argument offset
przekazywany do metody nie może być większy od wartości z właściwości CharacterData.length
danego węzła znakowego, bo zrzucony zostanie błąd.
Metoda insertdData()
jest w zasadzie precyzyjniejszą odmianą metody CharacterData.appendData()
, gdyż pozwala wstawiać nową treść nie tylko na końcu danych tekstowych w danym węźle znakowym, ale także w dowolnym ich miejscu.
Prosty przykład:
<!DOCTYPE html>
<html>
<head>
<script>
function insData(offset, data){
var result = document.getElementById("info");
try{
var cloneText = document.getElementById("tekst").firstChild.cloneNode();
cloneText.insertData(offset, data);
result.innerHTML = cloneText.data;
}
catch(e){
result.innerHTML = "Przekazanie przesunięcia większego od liczby jednostek kodowych zrzuca błąd:"
result.innerHTML += "<br>" + e; // opis zależny od przeglądarki
result.innerHTML += "<br>" + e.constructor; // function DOMException() { [native code] }
}
}
</script>
</head>
<body>
<p>Kliknij konkretny przycisk by dodać w określonym miejscu aktualnych danych tekstowych w testowym akapicie nowe dane tekstowe.</p>
<input type="button" value="insertData('0', 'TEST1')" onclick="insData('0', 'TEST1')">
<input type="button" value="insertData('5', 'TEST2')" onclick="insData('5', 'TEST2')">
<input type="button" value="insertData('10', '')" onclick="insData('10', '')">
<input type="button" value="insertData('47', null)" onclick="insData('47', null)">
<input type="button" value="insertData('50', '')" onclick="insData('50', '')">
<p id="tekst" >Węzeł tekstowy umieszczony w testowym akapicie.</p>
<p style="color: blue;">Wynik działania przycisków:</p>
<p id="info"></p>
</body>
</html>
Składnia Web IDL#
interface CharacterData : Node { void insertData(unsigned long offset, DOMString data); }