Optimizing dynamic table creation: JavaScript vs. jQuery
Well, how about

function MakeTablejQuery(rows, cols) {
    var table = $("&lt;table/&gt;").attr("border", 1);
    for (r = 0; r &lt; rows; r++) {
        var row = $("&lt;tr/&gt;");
        for (var c = 0; c &lt; cols; c++) {
            if (r == 0) {
                row.append($("&lt;th/&gt;").text("Column " + c))
            } else {
                row.append($("&lt;td/&gt;").text(c.toString() + r.toString()))
            }
        }
        table.append(row);
    }
    $("#placeholder").append(table);
}

MakeTablejQuery(5, 3);


And here's a more elegant version in a functional style:

Number.prototype.times = function(fn) {
    for(var r = [], i = 0; i &lt; this; i++)
        r.push(fn(i));
    return r;
}

function MakeTablejQuery(numRows, numCols) {

    var header = numCols.times(function(c) {
        return $("&lt;th/&gt;").text("Column " + c);
    });

    var row = function(r) {
        return $("&lt;tr/&gt;").append(numCols.times(function(c) {
            return $("&lt;td/&gt;").text([c, r].join(""));
        }));
    };

    return $("&lt;table/&gt;")
            .append(header)
            .append(numRows.times(row))
            .attr("border", 1);
}

$("#placeholder").append(MakeTablejQuery(5, 3));


Also, jQuery is not about "less" code, it's about more readable code - note how the last "return" statement reads almost like an english sentence.