I’m surprised they didn’t add this feature to the core of jQuery. Oh well, here is a plug-in to create a child nodes. The plug-in also returns the nodes that were created or the jQuery object that called the function if no options were passed.
(function($) {
$.fn.extend({
createChild: function(options) {
if (typeof options === "string") {
options = { tag: options };
}
var settings = $.extend({}, $.fn.createChild.defaults, options);
if (settings.tag) {
var arr = [];
this.each(function(i, e) {
var elem = document.createElement(settings.tag);
$(this).append($(elem).html(settings.html).attr(settings.attr));
arr[i] = elem;
});
return $(arr);
} else {
return this;
}
}
});
$.fn.createChild.defaults = {
tag: null,
attr: null,
html: null
};
})(jQuery);
Example
$(function() {
// does not create a child because no tag type was specified and
// calling jQuery object returned
$("div").createChild().html("welcome");
// creates a child "span" and returns a jQuery
// object wrapping the child that were created
$("p").createChild("span").html("this is SPAN").createChild("hr");
// creates a child "div" with it's html and attributes set
$("p").createChild({
tag: "div",
html: "hello",
attr: { style: "background-color: blue; color: red;"}
});
});