我正在尝试学习som javascript / jQuery的东西,而我真的在努力学习这个。这基本上是一个结构问题 - 如何以最好的方式做事。
我有这个函数,它从三个无序列表中的一个中随机挑选一个列表项(所有列表项都已隐藏)并显示它。根据我当前所在的页面,我想特别从一个列表中选择一个列表项。我的所有列表都标有“id”,以使其独一无二。
我可以使用我选择的列表ID将参数传递给我的randomize函数,以使其仅从该特定列表中选择一个项目。但是,这意味着我必须在html中放置内联脚本(一个脚本标记,每个页面都有自定义函数调用),以及我所听到的内联脚本以及阻止页面呈现。那会很糟糕,因为我关心性能。另一种方法可能是有很多if / else子句,例如“if body has class theclassname - > from listize with id with the_id”。但这意味着脚本必须在DOM上进行大量不必要的查询。
不知道我所谈论的是否有一个术语。也许类似于“条件函数调用”或“基于页面的函数调用”。
你会如何解决这个问题?我知道我的CSS& HTML,但对javascripting来说还是一个新手。只是想做正确的事......
答案 0 :(得分:1)
一种方法是创建一个包含在所有页面标题中的javascript文件。 javascript文件将包含带有pageId的函数,并返回基于页面的列表项
function getListItem(pageId) {
switch (pageId) {
...
}
}
将ID属性分配给每个页面的BODY标记,对应于javascript函数中的pageId:
<body id="home-page">
然后,在页面加载时,您可以使用jQuery将ID值传递给您的函数:
<script type="text/javascript">
$(function() {
var listItem = getListItem($('body').attr["ID"]);
} );
</script>
这会将“home-page”传递给你的javascript函数,并返回你的javascript函数中逻辑确定的列表项。
答案 1 :(得分:1)
执行此操作的最佳方法是检查url(不涉及DOM遍历,没有其他外部脚本,因此速度很快):
var path = window.location.pathname;
if (path.indexOf('/a_unique_url') !== -1) {
// do code for the page 'a_unique_url';
} else if (path.indexOf('/another_unique_url') !== -1) {
// do code for the page 'another_unique_url';
} else {
// do default action, because none of the above were found.
}
你的一点点罗嗦,但如果你有很多独特的操作会更快,那就是使用switch语句和完整路径,如下所示:
var path = window.location.pathname;
switch(path) {
case '/full/path/after/domain.html':
// do code for the page '/full/path/after/domain.html';
break;
case '/some/other/path.html':
// do code for the page '/some/other/path.html';
break;
case '/yet/another/path.html':
// do code for the page '/yet/another/path.html';
break;
default:
// do default action, because none of the above were found.
break;
}
虽然,如果您可以访问服务器端脚本,那么这些操作有更有效的方法。
答案 2 :(得分:0)
在运行时从服务器端添加它: Page.RegisterClientScriptBlock Method
使用代码隐藏中的属性自定义它;
function myFunction() {
var theParameter = '<%# parameterName>';
// do something
}
答案 3 :(得分:0)
为避免脚本占用浏览器的可能性,通常的做法是将脚本放在body标记结束之前。
您甚至可能希望查看异步脚本加载。
答案 4 :(得分:0)
朋友,我不明白你想要什么,但我会尽力帮助:
如果你把它们单独放在你的代码中间,内联的javascript会阻止你的页面,但你可以说它们只有在页面加载了这段代码时执行:window.onload = function (){
//call your function with the desired parameter
}
因此,当您的页面加载时,将执行window.onload上的函数。