我有一个功能可以从网址中删除youtube id。然后我想在每页10次使用此功能(在wordpress循环中)。
当我在函数脚本标记中提供url时,该函数效果很好,但是当我在循环中启动一组新的脚本标记时,它不起作用。
我需要知道如何在不首先声明所有功能的情况下使用我的功能。
所以这是我在标题中的代码:
<script type="text/javascript">
$(document).ready(function() {
var getList = function(url, gkey){
var returned = null;
if (url.indexOf("?") != -1){
var list = url.split("?")[1].split("&"),
gets = [];
for (var ind in list){
var kv = list[ind].split("=");
if (kv.length>0)
gets[kv[0]] = kv[1];
}
returned = gets;
if (typeof gkey != "undefined")
if (typeof gets[gkey] != "undefined")
returned = gets[gkey];
}
return returned;
};
// THIS WORKS
alert(getList('http://www.youtube.com/watch?v=dm4J5dAUnR4', "v"));
});
但是当我尝试在页面上的其他地方使用它时,它不起作用。
<script type="text/javascript">
$(document).ready(function() {
alert(getList('http://www.youtube.com/watch?v=dm4J5dAUnR4', "v"));
};
</script>
Firebug给了我 getList未定义这是有道理的,因为它没有。我可以'全局'声明这个功能吗?
答案 0 :(得分:101)
您有两个选项,将其添加到window
对象以使其成为全局:
window.getList = function(url, gkey){
// etc...
}
或将其从文档就绪事件处理程序内部移动到全局范围:
$(document).ready(function() {
alert(getList('http://www.youtube.com/watch?v=dm4J5dAUnR4', "v"));
});
var getList = function(url, gkey){
var returned = null;
if (url.indexOf("?") != -1){
var list = url.split("?")[1].split("&"),
gets = [];
for (var ind in list){
var kv = list[ind].split("=");
if (kv.length>0)
gets[kv[0]] = kv[1];
}
returned = gets;
if (typeof gkey != "undefined")
if (typeof gets[gkey] != "undefined")
returned = gets[gkey];
}
return returned;
};
您可能还想阅读this question关于使用var functionName = function () {}
vs function functionName() {}
和this article关于变量范围的信息。
答案 1 :(得分:44)
另一个选择是将函数挂起jQuery对象本身。这样你就可以避免进一步污染全局名称空间:
jQuery.getlist = function getlist(url, gkey) {
// ...
}
然后你可以用“$ .getlist(url,key)”
来获得它答案 2 :(得分:8)
在ready()函数之外声明getList()..
var getList = function(url, gkey){
var returned = null;
if (url.indexOf("?") !=
....
....
...
};
现在getList可以在代码中的任何位置工作:
$(document).ready( function() {
alert(getList('http://www.youtube.com/watch?v=dm4J5dAUnR4', "v"));
});
问题是,getList(。)函数的范围。
答案 3 :(得分:2)
只需将其定义为脚本顶部的常规函数:
<script type="text/javascript">
function getlist(url, gkey){
...
}
</script>
答案 4 :(得分:1)
您只需在$.fn
变量中添加您的功能:
(function ($) {
$.fn.getList = function() {
// ...
};
}(jQuery));
使用示例:
$().getList();
这是您在为jQuery创建Basic Plugin时通常会执行的操作。
答案 5 :(得分:-4)
要将其声明为全局函数,只需删除所有jQuery特定位。像这样:
function getList(url, gkey) {
var returned = null;
if (url.indexOf("?") != -1){
var list = url.split("?")[1].split("&"), gets = [];
for (var ind in list){
var kv = list[ind].split("=");
if (kv.length>0) {
gets[kv[0]] = kv[1];
}
}
returned = gets;
if (typeof gkey != "undefined") {
if (typeof gets[gkey] != "undefined") {
returned = gets[gkey];
}
}
return returned;
}
然后你应该可以从任何地方打电话。