我有一个带有一堆关键字和值的对象:(为了便于阅读,我将其缩小为一个值)
var linksarray = {
getting_Started : "Getting Started"
};
目的是在我的页面上浏览一堆链接,操纵href属性并依赖于最终结果,即getting_Started,使用它作为获取值的关键'入门'从对象。
要想象:
以下是代码,操纵值的注释:
var link = jQuery(this).attr('href'); //link = ../getting_Started.htm
var res = link.split('/');
var lastEl = res.pop(); //link = getting_Started.htm
var testEl = firstEl.split('.');
var testElUse = testEl[0]; //link = getting_Started
testElUse = '\'' + testElUse + '\''; //link = 'getting_Started'
这一切都正常,我得到了正确的字符串。
从这里开始,我使用了很多不同的解决方案,这些解决方案都是我在Google上找到的,但都没有。我已经浪费了一天半的时间。这是我期望工作的两个解决方案......但不要。
解决方案1:
var stringJson = JSON.stringify(linksarray);
var obj=JSON.parse(stringJson) ;
alert(obj[testElUse]); //this results in 'undefined'
解决方案2:
alert(linksarray[testElUse]); //this results in 'undefined'
我知道有点和块注释,但据我所知,如果你想根据这个链接动态引用一个属性,就可以使用块:Dynamically access object property using variable
无论我做什么,我都会得到不确定的回复......而不是"入门"我正在寻找。
请帮助:)
答案 0 :(得分:1)
首先,使用regExp从您正在寻找的href属性中提取变量可能会更容易和更简洁。为您节省大量的弹出和切片(: http://www.regexr.com/是调整和测试regExp的好网站。 使用regExp它看起来像这样:
var link = $('a');
var href = link.attr('href');
console.log(href); // http:www.google.com/getting_started.html
// .*/ - captures everything up to the last '/'
// (.*) - captures everything in between the previous selection and
// the next and puts in into a group.
// \.(html|htm) - captures .html or .htm
var regExp = /.*\/(.*)\.(html|htm)/g;
// replace the entire url with the value found in the first group selection.
var testElUse = href.replace(regExp, '$1');
console.log(testElUse); // getting_started
然后,您应该能够使用括号表示法从Object中提取值:
// retrieve the value from the linksArray
console.log( linksArray[testElUse] ); // Getting started
确保名称匹配(:希望这会有所帮助。
答案 1 :(得分:0)
原因似乎是'getting_Started' !== 'getting_started'
您在“已启动”中使用大写S定义了links_array属性。
有时它只是让我们感到困惑的小事。 :)
答案 2 :(得分:0)
这是因为变量和属性不同。
该属性为getting_Started
和testElUse = "\getting_started\"
;
这就是未定义的原因
答案 3 :(得分:0)
删除这部分解析代码
testElUse = '\'' + testElUse + '\'';
额外的撇号意味着您正在寻找名为'getting_Started'
的属性,而不是getting_Started
(这是2个不同的字符串)。
请参阅此fiddle。