Divulgação: Eu sou o mantenedor do BOB.
Existe uma biblioteca javascript que torna esse processo muito mais fácil, chamada BOB .
Para seu exemplo específico:
<div><img src="the url" />the name</div>
Isso pode ser gerado com BOB pelo código a seguir.
new BOB("div").insert("img",{"src":"the url"}).up().content("the name").toString()
//=> "<div><img src="the url" />the name</div>"
Ou com a sintaxe mais curta
new BOB("div").i("img",{"src":"the url"}).up().co("the name").s()
//=> "<div><img src="the url" />the name</div>"
Esta biblioteca é bastante poderosa e pode ser usada para criar estruturas muito complexas com inserção de dados (semelhante ao d3), por exemplo:
data = [1,2,3,4,5,6,7]
new BOB("div").i("ul#count").do(data).i("li.number").co(BOB.d).up().up().a("a",{"href": "www.google.com"}).s()
//=> "<div><ul id="count"><li class="number">1</li><li class="number">2</li><li class="number">3</li><li class="number">4</li><li class="number">5</li><li class="number">6</li><li class="number">7</li></ul></div><a href="www.google.com"></a>"
O BOB atualmente não suporta a injeção de dados no DOM. Isso está no todolist. Por enquanto, você pode simplesmente usar a saída junto com JS normal ou jQuery e colocá-la onde quiser.
document.getElementById("parent").innerHTML = new BOB("div").insert("img",{"src":"the url"}).up().content("the name").s();
//Or jquery:
$("#parent").append(new BOB("div").insert("img",{"src":"the url"}).up().content("the name").s());
Fiz esta biblioteca porque não fiquei satisfeito com nenhuma das alternativas como jquery e d3. O código é muito complicado e difícil de ler. Trabalhar com o BOB é, na minha opinião, o que obviamente é tendencioso, muito mais agradável.
O BOB está disponível no Bower , então você pode obtê-lo executando bower install BOB
.