Re: Insertbefore - c++ success and then failure

[email protected]
Newsgroups gmane.comp.mozilla.devel.dom
Organization http://groups.google.com
Message-ID <cff99abb-7c2c-4ec9-9478-3de9b37d2111@a17g2000prm.googlegroups.com>
In the code snippets below, the first section succeeds in finding a
brand new element added recently to the DOM and inserting before
that.  The second section fails, even though the already existing
element RACEOTHR is found.  Trying four different variations on insert
fails each time with -2142044152 or 0x80530008.

There seems to be no difference between the successful and failed
except the way the element was found.   The successful insert is
inserting before an element just added to the DOM, the failed is
inserting before an already existing element.  Both elements that are
found and inserted before are text input fields.

Any help greatly appreciated.

/*** THIS SUCCEEDS **/
	data.Assign(L"input001");
	domDoc->GetElementById(data, (nsIDOMElement **)&ielement2);

	// find the 1st input element and insert this one before that
	data.Assign(L"input");
	domDoc->CreateElement(data, getter_AddRefs(delement));
	ielement = do_QueryInterface(delement);
	data.Assign(L"text");
	ielement->SetType(data);
	data.Assign(L"testAdd2");
	ielement->SetName(data);
	data.Assign(L"should be second element");
	ielement->SetValue(data);
	ielement->SetSize(30);
	printf("insert before to htmlform result: %i\n",
		htmlform->InsertBefore(ielement, ielement2, getter_AddRefs(dnode)));


/** ALL ATTEMPTS BELOW FAIL */
	data.Assign(L"INPUT");
	domDoc->GetElementsByTagName(data, getter_AddRefs(dnodelist));
	dnodelist->GetLength(&i);
	// search for raceothr
	bpass = false;
	for (int xx=0;xx<i;xx++)
	{
		dnodelist->Item(xx,getter_AddRefs(dnode));
		ielement2 = do_QueryInterface(dnode, &rv);
		if (ielement2)
			ielement2->GetName(data);
		else continue;
		if (strcmp(NS_ConvertUTF16toUTF8(data).get(),"RACEOTHR") == 0)
		{
			bpass = true;
			break;
		}
	}

	if (!bpass)
		return;

	// create new input
	data.Assign(L"input");
	domDoc->CreateElement(data, getter_AddRefs(delement));
	ielement = do_QueryInterface(delement);
	data.Assign(L"text");
	ielement->SetType(data);
	data.Assign(L"testAdd3");
	ielement->SetName(data);
	data.Assign(L"should be third element");
	ielement->SetValue(data);
	ielement->SetSize(30);

	/** ALL FAIL -- variations are using the document vs form and node vs
input element **/

	i =	domDoc->InsertBefore(ielement, ielement2,
getter_AddRefs(dnode2));
	printf("insert before to htmlform result: %i\n",i);
	if (i == 0)
		return;

	i = htmlform->InsertBefore(ielement, ielement2,
getter_AddRefs(dnode2));
	printf("insert before to htmlform result2 : %i\n",i);
	if (i == 0)
		return;

	i = domDoc->InsertBefore(ielement, dnode,  getter_AddRefs(dnode2));
	printf("insert before to htmlform result3 : %i\n",i);
	if (i == 0)
		return;

	i = htmlform->InsertBefore(ielement, dnode, getter_AddRefs(dnode2));
	printf("insert before to htmlform result4 : %i\n",i);
	if (i == 0)
		return;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.