gpt4 book ai didi

jquery - IndexOf 和数组 - 优化此 jQuery 代码的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-01 04:47:10 24 4
gpt4 key购买 nike

我有一些 jQuery 代码,可以在某些网页上执行一些特定的操作,但不会在其他网页上加载。这是我当前运行上述代码的方法:

if ((window.location.href).indexOf('somewebsite.com') >= 0){
chrome.extension.sendMessage({greeting: "loadscript"});
var stuff = new Stuff();
//run some code
dothiseverytime(withSomeParams);
} else if ((window.location.href).indexOf('someotherwebsite.com') >= 0){
chrome.extension.sendMessage({greeting: "loadscript"});
var stuff = new Stuff();
//run some code
dothiseverytime(withDifferentParams);
} else if
// etc..

我想知道是否可以使用indexOf 和数组按照switch case 的方式做一些事情。也许有类似这个伪代码的东西?

someWebsites = ['somewebsite.com','someotherwebsite.com']
function checkTabURL {
switch ((window.location.href).indexOf(someWebsites) >= 0)
case 0 // first site in our list - index 0
var stuff = new Stuff();
// do some stuff
case 1 // second site on our list - index 1
var stuff = new Stuff();
// do some other stuff
case -1 // site isn't on the list
// don't do anything
}

我想尽量减少我的代码,并且我认为使用这些东西也会减少编写的代码量。

由于人们混淆了我需要什么并提供相反的内容(根据数组搜索 URL,而不是根据 URL 搜索数组) - 我想澄清一下。

我的数组可能包含“somesite.com/subdir”之类的内容,因此我无法将 URL 与数组匹配 - 我需要将数组与 URL 匹配。我需要查看数组中的任何内容是否在当前 URL 中(然后执行一个案例),而不是相反。

IE:当前 URL 中是否包含“somesite.com/subdir”?当前 URL 中是否有“someothersite.com”?前者执行case 0,后者执行case 1。如果两者都不是,则情况 -1。

最佳答案

根据这里的评论和讨论,这是我修改后的答案。首先,JavaScript 中有两个 indexOf 方法。一是String Method indexOf,它返回指定值在字符串中第一次出现的位置。第二个是Array Method indexOf,在数组中搜索指定项,并返回其位置。

第一个答案为您提供了数组方法作为解决方案,但您需要的是字符串方法的扩展版本。由于您无法 native 使用数组作为 String 方法的参数,因此您需要创建一个自定义方法:

/**
* Extend the Array object
* @param needle The string to search for
* @returns Returns the index of the first match or -1 if not found
*/
Array.prototype.searchFor = function(needle) {
for (var i=0; i<this.length; i++)
if (this[i].indexOf(needle) == 0)
return i;
return -1;
};

使用此方法(或类似的方法),您可以测试一个字符串(您的 URL)是否与给定数组的元素部分或完全匹配。

var someWebsites = ['somewebsite.com/subdirectory','someotherwebsite.com'];

function checkTabURL(url) {
switch (someWebsites.searchFor(url)) {
case 0:
console.log('case 0');
break;
case 1:
console.log('case 1');
break;
// you can also combinate different cases:
case 2:
case 3:
// do your stuff here
break;
default:
console.log('default');
break;
}

}

// for testing: logs 0 (case 0)
// since somewebsite.com is indexOf somewebsite.com/subdirectory
checkTabURL('somewebsite.com');
//checkTabURL(window.location.href);

The new fiddle is here .

关于jquery - IndexOf 和数组 - 优化此 jQuery 代码的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27764016/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com