diff --git a/dlls/mshtml/htmltextnode.c b/dlls/mshtml/htmltextnode.c
index fd4795b7d82..411123dd5bb 100644
--- a/dlls/mshtml/htmltextnode.c
+++ b/dlls/mshtml/htmltextnode.c
@@ -152,8 +152,31 @@ static HRESULT WINAPI HTMLDOMTextNode_get_length(IHTMLDOMTextNode *iface, LONG *
static HRESULT WINAPI HTMLDOMTextNode_splitText(IHTMLDOMTextNode *iface, LONG offset, IHTMLDOMNode **pRetNode)
{
HTMLDOMTextNode *This = impl_from_IHTMLDOMTextNode(iface);
- FIXME("(%p)->(%d %p)\n", This, offset, pRetNode);
- return E_NOTIMPL;
+ HTMLDOMNode *node;
+ nsIDOMText *text;
+ nsresult nsres;
+ HRESULT hres;
+
+ TRACE("(%p)->(%d %p)\n", This, offset, pRetNode);
+
+ nsres = nsIDOMText_SplitText(This->nstext, offset, &text);
+ if(NS_FAILED(nsres)) {
+ ERR("SplitText failed: %x08x\n", nsres);
+ return E_FAIL;
+ }
+
+ if(!text) {
+ *pRetNode = NULL;
+ return S_OK;
+ }
+
+ hres = get_node(This->node.doc, (nsIDOMNode*)text, TRUE, &node);
+ nsIDOMText_Release(text);
+ if(FAILED(hres))
+ return hres;
+
+ *pRetNode = &node->IHTMLDOMNode_iface;
+ return S_OK;
}
static const IHTMLDOMTextNodeVtbl HTMLDOMTextNodeVtbl = {
diff --git a/dlls/mshtml/tests/jstest.html b/dlls/mshtml/tests/jstest.html
index 2b3634e5e0e..528c2e10f5b 100644
--- a/dlls/mshtml/tests/jstest.html
+++ b/dlls/mshtml/tests/jstest.html
@@ -339,6 +339,21 @@ function test_language_attribute() {
ok(elem.language === "1", "elem.language = " + elem.language);
}
+function test_text_node() {
+ document.body.innerHTML = 'testing text';
+ var text = document.body.childNodes[0], text2;
+ ok(text.data == "testing text", "text.data = " + text.data);
+
+ text2 = text.splitText(7);
+ ok(text.data == "testing", "text.data = " + text.data);
+ ok(text2.data == " text", "text2.data = " + text2.data);
+ ok(text.nextSibling === text2, "text.nextSibling !== text2");
+
+ text2 = text.splitText(0);
+ ok(text.data == "", "text.data = " + text.data);
+ ok(text2.data == "testing", "text2.data = " + text2.data);
+}
+
var globalVar = false;
function runTests() {
@@ -363,6 +378,7 @@ function runTests() {
test_customtag();
test_whitespace_nodes();
test_language_attribute();
+ test_text_node();
var r = window.execScript("globalVar = true;");
ok(r === undefined, "execScript returned " + r);