当我使用jQuery获取对象的CSS值时,每个浏览器(IE,Mozilla,Chrome等)都会返回不同的值。
例如,在Chrome中,背景图片(.css(" background-image"))会返回:
url(http://i41.tinypic.com/f01zsy.jpg)
在Mozilla中,它返回:
url("http://i41.tinypic.com/f01zsy.jpg")
我在其他方面遇到同样的问题,例如background-size。
在Chrome中它返回:
50% 50%
但Mozilla回归:
50%+50%
我的问题是,我有分割CSS(背景大小)的功能,例如基于空格.split(""),但这不适用于Mozilla,因为它使用+代替。
有什么办法可以解决这个问题并让浏览器使用一个标准吗?
根据用户使用的浏览器类型,是否有任何我可以写入哪些抓取和拆分值的函数?
答案 0 :(得分:4)
我的问题是,我有分割CSS的功能 (background-size),例如基于空格.split(“”),但是这个 无法在Mozilla上运行,因为它使用+代替。
尝试将\+
添加到RegExp
传递给.split
.split(/\s|\+/)
var res = ["50%+50%", "50% 50%"];
var re = /\s+|\+/;
console.log(res[0].split(re), res[1].split(re));
答案 1 :(得分:2)
这可能不是最干净的方法,但您可以为背景图像源运行字符串解析器并删除任何引号。这将是解析背景图像URL的最有效方法。它应该可以在不损害数据的情况下工作,因为URL通常不能包含引号,因为它们被编码为%22
对于background-size,你可以解析+符号的结果并将它们更改为空格,因为+符号通常不会作为任何CSS属性的值出现,所以你应该相对安全地服用那些。
此外,您可以检查浏览器类型,看看您是否必须首先运行这些解析。作为预防措施,您还应该看到Opera和Safari如何返回结果,如果这些结果有所不同,您可以为解析器创建分支语句,以处理不同浏览器返回的不同类型的CSS值。
注意:我所描述的解析方法尝试将Firefox结果转换为Chrome风格的结果。
答案 2 :(得分:2)
不同的浏览器使用不同的CSS标准,您可能必须编写一个完整的解析器,使它们成为标准。
解决方法是,您应该考虑不同的浏览器标准来拆分或使用CSS值。像CSS(背景大小)问题可以用这个来解决:
space.split("\\s|\\+"); //split my string where it either has a space 'or' a plus sign
对于CSS(背景图像),解决方案可能是在使用之前替换引号:
space.replace("\"", "");
尝试为所有浏览器进行通用分割。希望有所帮助。
答案 3 :(得分:1)
感谢您的帮助。
我将分享我最终使用的代码!
cssCommas: function(text)
{
return text.replace(new RegExp("\"", "g"),"");
},
cssPlus: function(text)
{
return text.replace(new RegExp("\\+", "g"),"");
},
cssSplit: function(text,removePercent)
{
var removeParent = removeParent || false;
if(removePercent == true)
{
text = text.replace(new RegExp("%", "g"),"");
}
return text.split(new RegExp("\\s|\\+","g"));
},
css: function(text)
{
return this.cssCommas(this.cssPlus(text));
}
现在可以在所有浏览器上完美运行。非常感谢。