2010-04-17 60 views
1

我有一个要求删除锚标记的父元素。我正在动态添加div并将其锚定。下面是我的代码,请帮我如何删除使用jQuery锚定标记的父亲

$("<div>"+offer+"<a href='javascript:deleteOrder(this.parent)'>X</a></div>").appendTo($('#resultTable #resultRow td')[selectedOrder-1]); 


function deleteOrder(obj) 
     { 
      $(obj).parent().remove(); 
     } 

回答

6

我会改变你如何实现这一点:

var a = $("<a>").attr("href", "#").addClass("offer"); 
$("<div>").text(offer).append(a).appendTo("#resultTable"); 

有:

$(function() { 
    $("a.offer").live("click", function() { 
    $(this).closest("div").remove(); 
    return false; 
    }); 
}); 

你使用jQuery,但你内联你的Javascript。这是非常“非jQuery”,而是鼓励unobtrusive Javascript。我已经使用live()来处理将该事件处理程序绑定到动态创建的元素。这是(imho)一个更清洁的解决方案。

另外,您可以按照自己的方式创建标记,但可能会产生问题。例如,如果offer包含<?或者其他需要逃脱的东西?最好使用适合这项工作的功能,以避免所有逃跑(正如我所做的那样)。此外,肯定jQuery的1.4+甚至更早,$("<a>")比满标记作为上述用途document.createElement()而不是innerHTML,这可能是在某些浏览器很慢,快

jQuery 1.4 Released – Full Release Notes

jQuery(“<div>”) jQuery(“<div/>”) and jQuery(“<div></div>”) 

所有这三个现在使用相同的代码路径 (使用document.createElement), 改善 jQuery("<div></div>")性能。请注意,如果您指定了 属性,则我们使用 浏览器的本机解析(使用 innerHTML)。

最后,您可以将选择器传递给appendTo()。不需要传递一个jQuery对象。

+0

+1 HTML string-slinging不好,mm'kay? – bobince 2010-04-17 14:16:06