在下面的示例代码中,我将onclick事件处理程序附加到包含文本"foo"的span.处理程序是一个匿名函数,弹出alert().
但是,如果我分配给父节点alert(),则此innerHTML事件处理程序将被销毁 - 单击"foo"将无法弹出警告框.
这可以解决吗?
<html>
<head>
<script type="text/javascript">
function start () {
myspan = document.getElementById("myspan");
myspan.onclick = function() { alert ("hi"); };
mydiv = document.getElementById("mydiv");
mydiv.innerHTML += "bar";
}
</script>
</head>
<body onload="start()">
<div id="mydiv" style="border: solid red 2px">
<span id="myspan">foo</span>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud) 我正在研究一个问题,需要为一组~100个元素中的每个元素创建一个复杂的div块.
除了内容之外,每个单独的元素都是相同的,它们看起来(在HTML中)是这样的:
<div class="class0 class1 class3">
<div class="spacer"></div>
<div id="content">content</div>
<div class="spacer"></div>
<div id="content2">content2</div>
<div class="class4">content3</div>
<div class="spacer"></div>
<div id="footer">content3</div>
</div>
Run Code Online (Sandbox Code Playgroud)
我可以:
1)innerHTML使用字符串连接创建所有元素以添加内容.
2)使用createElement,setAttribute并appendChild创建和添加每个div.
选项1获取稍微小一点的文件可供下载,但选项2的渲染速度似乎稍快.
除了表演之外还有一个很好的理由通过一条路线或另一条路线?我应该测试的任何跨浏览器问题/性能问题?
...或者我应该尝试模板和克隆方法?
非常感谢.
(我知道其他人问了一个类似的问题,它被关闭为'议论',但我真的很有兴趣理解围绕这个问题的争论.)
我非常了解JavaScript.我已经专业写了多年了.我已经内化了很多跨浏览器的不兼容性和粗略感,知道DOM操作就像我的手背,已经与业内一些最好的Web开发人员合作并获得了很多他们的魔力.
我一直在查看jQuery.我理解javascript库的意义(我写了多少次动画,getElementsByClass和hide/show函数?).但说实话,学习一种并不复杂的全新语法似乎是浪费时间.看起来我正在抨击墙壁来学习一个全新的JavaScript接口.
我在技术上不是工程师,所以也许我错过了什么.有人可以拼出jQuery的权衡吗?学习和理解jQuery语法真的比学习JavaScript更快吗?
在我的ASP.NET网站中,我使用Jquery调用Web方法,如下所示:
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
data: "{'param1': '" + param1 + "','param2': '" + param2+ "' }",
dataType: 'json',
url: "Default.aspx/TestMethod",
error: function (jqXHR, textStatus, errorThrown) {
alert("error: " + textStatus);
},
success: function (msg) {
document.getElementById("content").innerHTML = msg.d;
}
});
Run Code Online (Sandbox Code Playgroud)
Web方法定义是:
[System.Web.Services.WebMethod]
public static String TestMethod(String param1, String param2)
{
String to_return = /* result of operations on param1 and param2 */;
return to_return;
}
Run Code Online (Sandbox Code Playgroud)
我的结果是一个包含HTML代码的String.
如果to_return字符串很小,它是完美的.
但它给我的错误是:
500内部服务器错误6.22s
我尝试使用FireBug在Response中探索它,它向我展示:
{"Message":"处理请求时出错.","StackTrace":"","ExceptionType":""}
在Visual Studio中使用断点,我已将to_return字符串复制到文本文件中.文件大小变为:127 …