On 4/11/11 10:03 AM, Yehuda Katz wrote:
It would be useful if there was a way to take a String of HTML and parse it into a document fragment. This should work even if the HTML string contains elements that are invalid in the "in body" insertion mode.

Something like this code should work:

  var frag = document.createDocumentFragment();
  frag.innerHTML = "<tr><td>hello</td></tr>"
  someTable.appendChild(frag)

At present, this can sometimes be achieved if the context of the HTML string is known in advance. However, this is not always the case. For instance, jQuery supplies an API that looks like this:

  $("html string").appendTo("#table")

At the time that jQuery is creating the document fragment for the HTML string, it does not yet know what its context will be. This approach is used in order to enable convenient setup code. Here is a very contrived example to illustrate the point:

  var frag = $("html string")

// replace the HTML content of a descendent <span> with the contents of its data-title attribute frag.find("span[data-title]").html(function() { return this.attr("data-title"); })

  html.appendTo("#table")

In general, this makes it easier to build abstractions that work with Strings of HTML, without always needing to make sure consumers of the abstraction know and pass in the existing context.

This would probably require a new, laxer insertion mode, which would behave similarly to the body insertion mode, but with different semantics in the "/A start tag whose tag name is one of: "caption", "col", "colgroup", "frame", "head", "tbody", "td", "tfoot", "th", "thead", "tr""/ case. One way to handle those cases would be to immediately enter an appropriate insertion mode if an unexpected tag was found. For instance, if a start tr tag was encountered "at the root", the parser could go into "in table" or "in table body" insertion mode instead of treating it like a parse error and ignoring the token.


It would also be great to have some notification of the parser error - a console warning might be most appropriate. This would be a great aid when debugging functions that generate html. This feature is probably up to the browser vendors though.

Sean

Reply via email to