我为这个问题写了一个答案:根据 url 的新背景,我在答案中发布的代码是检查 URL 是否存在特定字符串,如果存在,则更改给定元素的背景图像。
所以!我是我,我想我会尝试避免使用 jQuery,并使用以下更传统的 vanilla JavaScript 方法:
var images = {
'halloween' : '/images/newbackground.jpg',
'christmas' : '/images/xmasbackground.jpg'
};
var url = document.location.href,
elem = document.getElementById('elementThatYouWantToStyle');
for (var keyword in images){
if (images.hasOwnProperty(keyword) && url.indexOf(keyword) !== -1) {
elem.style.backgroundImage = images[keyword];
}
}
来源。
然后我认为我会转换为功能方法,所以它变成了这样:
var images = {
'halloween': 'http://davidrhysthomas.co.uk/img/dexter.png',
'christmas': 'http://davidrhysthomas.co.uk/img/mandark.png'
};
function setBG(el, map, url) {
if (!el || !map) {
return false;
}
else {
var url = url || document.location.href,
el = el.nodeType == 1 ? el : document.getElementById(el);
for (var keyword in map) {
if (map.hasOwnProperty(keyword) && url.indexOf(keyword) !== -1) {
el.style.backgroundImage = encodeURIComponent(map[keyword]);
}
}
}
}
setBG('one', images, 'http://some.domain.com/with/halloween.jpg');
setBG(document.getElementById('two'), images, 'http://some.domain.com/with/christmas.jpg');
现在,如果我在循环内console.log()
的if
评估中添加一个,for...in
它表明我们正在进入循环,并且控制台表明我对 DOM 节点、图像对象、URL 有一个准确的引用(传递给函数) 并且正在从对象中获取正确的值。
但是,我尝试设置el.style.backgroundImage
属性的以下行不起作用(无论我是否将我的逻辑明显缺陷?为什么不被设置?map[keyword]
encodeURIComponent()
el.style.backgroundImage
(顺便说一句,JS Fiddle 的 JS Lint似乎对此很满意(除了重新定义现有变量 (url
和el
) 以实现回退/默认)。