当选择器是var但不能被硬编码,因为它是“动态的”时,如何编码jQuery选择器

时间:2018-10-03 14:53:25

标签: javascript jquery

我想定位页面上的元素并使用jQuery对其进行更改。我决定为每个域编写一个脚本,而不是为每个域编写单独的脚本。

逻辑很简单:

  • 我有一个域列表,可以将脚本应用到
  • 我有每个域要定位的元素列表(ID,类等)
  • 一些jQuery代码可以定位页面上的相关元素并对其进行处理

脚本的工作方式如下:

  • 它从页面URL中提取域名
  • 将其与域列表进行比较
  • 然后使用域的相关选择器填充jQuery选择器,并操纵页面上的元素

这样,如果我想定位一个新域,我所要做的就是将域名添加到域列表中,并添加一个标签列表以该域为目标。快速简单。

不幸的是,我只是无法理解如何用动态变量填充jQuery选择器……这是正确的术语吗?有可能吗?

这里是代码(为简便起见,有些是伪代码“ PC:”)

var domains = ["google", "mozilla", "stackoverflow"];

// tags per domain (note: variable names match domain names)
       var google = "#header, #footer";
      var mozilla = ".left-col, .right-col";
var stackoverflow = ".sidebar, #main-container";

// PC: store the current page URL in a variable using "window.location.href"
// PC: test list of domains against URL using .match() and store the result in the variable "pageDomain"

因此,我现在有一个保存域名的变量和一个变量(与域名同名),该变量保存要定位到该域的标签。如何使用正确的var名称填充jQuery选择器(显示为“ DVN”的占位符)。

$(DVN).css("outline", "1px solid red");

如果我将变量硬编码到jQuery选择器(例如mozilla)中,脚本可以正常工作,但是如何为动态生成的变量名实现呢?是否有jQuery语法?

为了使脚本正常工作,我最终使用了switch语句,但是我对该解决方案真的不满意。似乎有点笨拙,每次添加新域时,我都必须修改switch语句...这可能会变得很长。

// result from .match() converted to string to allow strict comparison
var stringyDomain = pageDomain.toString();

// this will be used to populate the jQuery code
var dynamicVariableName;

switch (stringyDomain) {
    case "google":
        dynamicVariableName = google;
        break;
    case "mozilla":
        dynamicVariableName = mozilla;
        break;
    case "stackoverflow":
        dynamicVariableName = stackoverflow;
        break;
}

“ dynamicVariableName”现在可以硬编码到jQuery选择器中。

必须有更好的方法!

0 个答案:

没有答案