Range#

Range.setStartBefore()#

Metoda setStartBefore() ustawia początek w danym zakresie (czyli jego węzeł początkowy i przesunięcie początkowe) przed przekazanym węzłem.

Opis działania#

Samo wywołanie i poszczególne jego części najlepiej objaśnić na zapisie składniowym:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
range.setStartBefore(node);

gdzie poszczególne człony oznaczają:

Algorytm wywołania metody setStartBefore(node) nie jest skomplikowany. Dla lepszego zrozumienia tematu prezentuję go w całości:

  1. Niech parent będzie rodzicem w node.
  2. Jeśli parent ma wartość null, to zrzuć wyjątek "InvalidNodeTypeError".
  3. Ustaw początek w obiekcie kontekstu na punkt graniczny (parent, indeks w node).

Do metody setStartBefore() nie można przekazywać węzłów, których rodzicem jest węzeł typu DocumentType lub wartość null, bo zrzucony zostanie błąd. Węzłem początkowym w zakresie zawsze zostanie rodzic przekazanego węzła natomiast przesunięcie początkowe zostanie dopasowane względem jego indeksu.

Punkty graniczne w zakresach można ustawiać na wiele różnych sposobów.

Prosty przykład:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
<script>

	// Tworzymy nowy zakres
	var range = document.createRange();

	// Zmieniamy początek i koniec zakresu
	range.setStart(document, 0);
	range.setEnd(document.documentElement, 1);

	document.write(range.startContainer); // [object HTMLDocument]
	document.write("<br>");
	document.write(range.startOffset); // 0
	document.write("<br>");
	document.write(range.endContainer); // [object HTMLHtmlElement]
	document.write("<br>");
	document.write(range.endOffset); // 1

	document.write("<br><br>");

	// Zmieniamy początek zakresu przed węzeł HEAD
	range.setStartBefore(document.documentElement.firstChild);

	document.write(range.startContainer); // [object HTMLHtmlElement]
	document.write("<br>");
	document.write(range.startOffset); // 0
	document.write("<br>");
	document.write(range.endContainer); // [object HTMLDocument]
	document.write("<br>");
	document.write(range.endOffset); // 1

	document.write("<br><br>");

	try{ // Ustawiamy początek zakresu przed węzeł Document
		range.setStartBefore(document);
	}
	catch(e){
		document.write("Przekazanie do metody setStartBefore() węzła bez rodzica zrzuca błąd:" + "<br>");
		document.write(e); // opis zależny od przeglądarki
		document.write("<br>");
		document.write(e.constructor); // function DOMException() { [native code] }
	}

</script>

Kolejny prosty przykład:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
<!DOCTYPE html>
<html>

<head>

	<script>

		function deleteFirstRow(){

			var info = document.getElementById("info");
			var table = document.getElementById("table");

			// Kiedy możliwe jest usunięcie pierwszego wiersza
			if (table.rows.length > 0){

				var firstRow = table.rows[0];

				var range = document.createRange();

				range.setStartBefore(firstRow);
				range.setEndAfter(firstRow);

				var result = "range.startContainer: " + range.startContainer
					+ "<br>" + "range.startOffset: " + range.startOffset
					+ "<br><br>" + "range.endContainer: " + range.endContainer
					+ "<br>" + "range.endOffset: " + range.endOffset
					+ "<br><br>" + "range.collapsed: " + range.collapsed;

				info.innerHTML = result;

				range.deleteContents(); // usuwamy aktualną zawartość zakresu

			}

		}

	</script>

</head>

<body>

	<table id="table" border="1">
		<tr>
			<td>Pierwszy wiersz, pierwsza kolumna</td>
			<td>Pierwszy wiersz, druga kolumna</td>
		</tr>
		<tr>
			<td>Drugi wiersz, pierwsza kolumna</td>
			<td>Drugi wiersz, druga kolumna</td>
		</tr>
	</table>

	<p>Kliknij przycisk by usunąć pierwszy wiersz w tabeli za pomocą zakresu.</p>
	<input type="button" value="deleteFirstRow()" onclick="deleteFirstRow()">
	<p style="color: blue;">Szczegółowe informacje dla zakresu:</p>
	<p id="info"></p>

</body>

</html>

Składnia Web IDL#

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
interface Range {
	void setStartBefore(Node node);
}

Specyfikacje i inne materiały#

Pasek społecznościowy

SPIS TREŚCI AKTUALNEJ STRONY

Range (H1) Range.setStartBefore() (H2) Opis działania (H3) Składnia Web IDL (H3) Specyfikacje i inne materiały (H3)