Jquery-将字符串视为变量名

Jquery-将字符串视为变量名,jquery,Jquery,这是我的简短脚本: var string1 = "This is string 1"; var string2 = "This is string 2"; function test() { var selectedOption = $("select#myoptions option:selected").attr("id"); var str = 'string'+selectedOption; $("div#result").html(str); } $("s

这是我的简短脚本:

var string1 = "This is string 1";
var string2 = "This is string 2";

function test() {
    var selectedOption = $("select#myoptions option:selected").attr("id");
    var str = 'string'+selectedOption;
    $("div#result").html(str);  
}
$("select#myoptions").change(test);
我有一个下拉列表,每个选项都有一个整数id。选择此下拉列表时,我希望jQuery获取所选选项的id,并在末尾显示具有所选id的字符串变量的内容

如果选择id为“1”的选项,将显示“这是字符串1”

但我现在看到的是显示的文本“string1”,而不是文本“This is string 1”


我需要一些帮助。非常感谢

有什么理由你不能做吗

function test() {
    var selectedOption = $("select#myoptions option:selected").attr("id");
    var str = 'This is string ' + selectedOption;
    $("div#result").html(str);  
}
$("select#myoptions").change(test);
实际上,我想您的字符串与图中所示的不同,请尝试:

var stringArray = ['this is string 1', 'this is string 2'];
function test() {
    var selectedOption = $("select#myoptions option:selected").attr("id");
    var str = stringArray[selectedOption -1];
    $("div#result").html(str);  
}
$("select#myoptions").change(test);

您不能像前面提到的那样动态使用变量,最好的办法是获取一个数组并按索引提取项。

您可以使用对象存储这些值,然后按键获取它们

var strings = {
  string1: 'This is string 1',
  string2: 'This is string 2'
};

function test() {
    var selectedOption = $("select#myoptions option:selected").attr("id");
    var str = 'string'+selectedOption;
    $("div#result").html(strings[str]);  
}
$("select#myoptions").change(test);
或者,如果字符串在全局范围内,您可以保留字符串的使用方式,并通过
窗口
对象访问它们

var string1 = "This is string 1";
var string2 = "This is string 2";

function test() {
    var selectedOption = $("select#myoptions option:selected").attr("id");
    var str = 'string'+selectedOption;
    $("div#result").html(window[str]);  
}
$("select#myoptions").change(test);

您可以更新测试函数以使用:

试试看


我提供这个是为了给你你想要的东西,虽然我很喜欢Rocket提供的答案,它要求你在存储字符串的方式上做一点小的改变。

没有特别的原因为什么它必须比数组更难,对吗

var strs = [
  "This is string 1", // Note, this is strs[0], not strs[1]
  "This is string 2"
];

function test() {
    var selectedOption = $("select#myoptions option:selected").attr("id");
    $("div#result").html(strs[selectedOption]);  
}
$("select#myoptions").change(test);
如果你真的需要,你可以使用散列,比如

var strs = {
  dog: "This is string 1",
  cat: "This is string 2"
};

但是在任何情况下,99%的时候,当人们试图用一个不变的值(即数组名称)和一个变量(即键)查找一个变量时,他们希望使用更简单的数组或散列。

因此,我很惊讶没有人添加这个答案,这直接回答了OP的问题。我同意其他方法更好,但通过这样做,你当然可以按照他要求的方式解决他的问题:

var str = 'string'+selectedOption;
var foundString = window[str];

嗨,“这是字符串…”只是一个例句。它们可以是其他任何东西,比如HTML、CSS……是的,读过之后有点想,看看我更现实的建议。比使用eval更好,因为eval是dangerous@Bernardo我也喜欢这个选项,但我必须说,将eval称为“危险”是相当愚蠢的。现在每个浏览器都有开发工具和javascript控制台,任何访问者都可以执行他们喜欢的任何javascript代码。。。eval本身并没有什么危险。为了支持我的说法,请看下面这个评价很高的答案:@Bernardo@Rocket你们两人的说法绝对荒谬。这有多危险?你认为Javascript控制台是危险的吗?我已经为使用eval()提供了支持良好的备份,我认为您应该提供一些证据,证明它比打开javascript控制台并在任何浏览器中进行黑客攻击更“危险”?我在@Fosco上的页面中“注入Javascript”,你说得对,
eval
并不危险。没有理由网站所有者不能自己使用恶意代码,或者用户不能打开浏览器控制台输入自己的隐秘想法。反对
eval
的更好的理由是,通常有一些方法是更快、更容易调试和更少波动的组合。我所见过的
eval
的最佳用途是用于构建在JS之上的代码解释器,用于调试(即将某个东西的工作方式与eval'ed语句进行比较)等。不过,对于简单的查找函数,数组工作得很好。在我看来,这确实容易得多。
var str = 'string'+selectedOption;
var foundString = window[str];