On 11/4/21 3:10 PM, Gabriel Ivăncescu wrote:
+ /* Create a temporary html element and parse it there */ + nsAString_InitDepend(&str, L"HTML"); + nsres = nsIDOMHTMLDocument_CreateElement(doc->nsdoc, &str, (nsIDOMElement**)&nshtml); + nsAString_Finish(&str); + if(NS_FAILED(nsres)) + return map_nsresult(nsres); + + if(name_len == 4 && !wcsnicmp(tag + 1, L"HTML", 4)) { + FIXME("Returning <html> element with no attributes\n"); +*ret = (nsIDOMElement*)nshtml; + return S_OK; + }
Did you try using <template> element instead of <html>? I'd expect it do do the right thing, but I didn't try.
+ + nsAString_InitDepend(&str, tag); + nsres = nsIDOMHTMLElement_SetInnerHTML(nshtml, &str); + nsAString_Finish(&str); + if(NS_FAILED(nsres)) { + hres = map_nsresult(nsres); + goto fail; + } + + /* Get the element and remove it from the temporary */ + if(!(p = heap_alloc((name_len + 1) * sizeof(WCHAR)))) + hres = E_OUTOFMEMORY; + else { + memcpy(p, tag + 1, name_len * sizeof(WCHAR)); + p[name_len] = '\0'; + nsAString_InitDepend(&str, p); + nsres = nsIDOMHTMLElement_GetElementsByTagName(nshtml, &str, &nscol); + nsAString_Finish(&str); + heap_free(p); + if(NS_FAILED(nsres)) + goto fail;
That's making things more complicated that they need to be. You could just use firstElementChild or something similar. Thanks, Jacek