--- title: Text.splitText() slug: Web/API/Text/splitText tags: - API - DOM - Method - Text - splitText - メソッド translation_of: Web/API/Text/splitText ---

{{APIRef("DOM")}}

Text.splitText() メソッドは、 {{domxref("Text")}} ノードを指定したオフセットで二つに分割し、両方のノードを兄弟としてツリーの中に保持します。

分割後、現在のノードには指定したオフセット位置までのすべてのコンテンツが設定され、新規作成された同じ種類のノードには残りのテキストが設定されます。新しく作成されたノードは呼び出し元に返されます。元のノードに親があった場合、新しいノードは元のノードの次の兄弟として挿入されます。オフセットが元のノードの長さと等しい場合、新しく作成されたノードにはデータがありません。

分割されたテキストノードは、 {{domxref("Node.normalize()")}} メソッドを用いて結合することができます。

構文

newNode = textNode.splitText(offset)

引数

offset
テキストノードを分割する直前の位置。

返値

新しく生成された {{domxref("Text")}} ノードを返し、指定されたオフセット位置移行のテキストが格納されます。

例外

{{domxref("DOMException")}} で値が INDEX_SIZE_ERR のものは、指定されたオフセットが負の値であるか、ノードのテキストの16ビット単位の文字数よりも大きい場合に発生します。 {{domxref("DOMException")}} で値が NO_MODIFICATION_ALLOWED_ERR のものは、ノードが読取専用の場合に発生します。

この例では、 {{HTMLElement("p")}} のテキストが二つのテキストノードに分割され、 {{HTMLElement("u")}} がその間に挿入されます。

HTML

<p>foobar</p>

JavaScript

const p = document.querySelector('p');

// <p> の中身をテキストノードとして取得
const foobar = p.firstChild;

// 'foobar' を二つのテキストノード 'foo' と 'bar' に分割し、
// 'bar' を const として保存
const bar = foobar.splitText(3);

// <u> 要素を作成して ' new content ' を含める
const u = document.createElement('u');
u.appendChild(document.createTextNode(' new content '));

// <u> を 'bar' の前に追加
p.insertBefore(u, bar);

// 結果: <p>foo<u> new content </u>bar</p>

結果

{{EmbedLiveSample("Example", 700, 70)}}

仕様書

仕様書 状態 備考
{{SpecName('DOM WHATWG', '#dom-text-splittext', 'Text.splitText')}} {{Spec2('DOM WHATWG')}} {{SpecName('DOM3 Core')}} から変更なし。
{{SpecName('DOM3 Core', 'core.html#ID-38853C1D', 'Text.splitText')}} {{Spec2('DOM3 Core')}} {{SpecName('DOM2 Core')}} から変更なし。
{{SpecName('DOM2 Core', 'core.html#ID-38853C1D', 'Text.splitText')}} {{Spec2('DOM2 Core')}} {{SpecName('DOM1')}} から変更なし。
{{SpecName('DOM1', 'level-one-core.html#ID-38853C1D', 'Text.splitText')}} {{Spec2('DOM1')}} 初回定義

ブラウザーの互換性

{{Compat("api.Text.splitText")}}

関連情報