2011-04-04 69 views
1

谁能帮我明白为什么这行不创建一个链接的图像:问题关于jQuery的.append()

var img = new Image(); 
$('#id').html('<a href="http://google.com">').append(img).append('</a>'); 

我设置IMG属性(SRC,ALT ...等) ,我只是把这些线路放在一边,因为它们不相关。不应该将DIV的HTML设置为HREF,然后是图像,然后是关闭A标签?这对我不起作用,我是否以这种错误的方式去做?

回答

2

这应做到:

$(img).appendTo('#id').wrap('<a href="http://google.com" />'); 

现场演示:http://jsfiddle.net/simevidas/A4HqE/1/


jQuery的html()会自动关闭你的HTML元素。在这里看到:http://jsfiddle.net/simevidas/Ut2pQ/


更好的解决方案:

$('<a href="http://google.com" />').append(img).appendTo('#id'); 

该解决方案是更好,因为这里的DOM操纵只有一次(当锚附加)。在我上面的原始解决方案中,DOM被操作了两次(1. IMG被附加,2. ANCHOR被包裹在图像中)。

现场演示:http://jsfiddle.net/simevidas/A4HqE/2/

+0

辉煌,wrap方法完美。 – 2011-04-04 18:44:09

+0

@Jon我用更好的解决方案更新了我的答案。 – 2011-04-04 19:03:22

1

追加是一个棘手的标签,有时它不符合你的期望。

在许多情况下,它更容易使用appendTo并实际构建元素。

你必须追加到...它不像一个字符串生成器。 尝试:

$('<a>').attr({'id': 'aId' 'href': '[path for link]'}).appendTo('#divId'); 
$('<img>').attr('src', '[path to image]').appendto('#aId'); 

如果您已经使用内置您new Image()可以使用它的ID作为选择追加到锚...可以追加到div你的形象。

0

.append需要整整标签作为输入,而不是开放标签:

$('#id').html('<a href="http://google.com"></a>').append(img); 
0

我只是这样做:

$('#id').append($('<a>').attr('href', 'http://www.google.com').append(img)); 

当然你要设置的所有属性为你的形象在任何事情都可以正常工