我要求删除锚标记的父元素。我动态地在其中添加div和锚点。下面是我的代码,请帮帮我
$("<div>"+offer+"<a href='javascript:deleteOrder(this.parent)'>X</a></div>").appendTo($('#resultTable #resultRow td')[selectedOrder-1]);
function deleteOrder(obj)
{
$(obj).parent().remove();
}
答案 0 :(得分: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对象。