我正在构建一个简单的CSS编辑器,我想让用户编辑元素的CSS属性或添加一个新元素。
在将新的CSS属性应用于元素之前,我想检查属性是否有效。
您是否知道一种简单的方法来检查CSS属性/值是否对jQuery有效?
更新:
示例:
$('#some-element').css('margin','10px'); //this is valid and it will be applied
$('#some-element').css('margin','asds'); //this is not valid and it will not be applied
如何在应用该属性之前检查margin: asds;
无效?
答案 0 :(得分:6)
您可以创建一个新元素并将CSS应用于它。您读取了初始值,将您的css应用于此元素并立即再次读取该值。如果新值 不等于初始值,则css有效(因为它已成功应用于元素)。
var div = $("<div>");
var _old = div.css(property);
div.css(property,value);
var _new = div.css(property);
var valid = _old!=_new;
// if (_old != _new), the rule has been successfully applied
console[valid?"log":"warn"]( `${property}:${value} is ${valid?"":"not"} valid!` );
<强> Example fiddle 强>
答案 1 :(得分:3)
来自Christoph的回答我得到了这个:
function validCSS(property,value){
var div = $("<div>");
var _old = div.css(property);
div.css(property,value);
var _new = div.css(property);
return (_old!=_new);
}
像这样使用:
if (validCSS(property, value)) {
$('#some-element').css(property, value);
} else {
alert ('Invalid CSS');
}
答案 2 :(得分:1)
您可以读取任何元素的CSS属性,并检查结果是否已定义。大多数(所有?)CSS属性都有一个默认值。
$("body").css("border"); // "0px none rgb(0, 0, 0)"
$("body").css("borderx"); // undefined
答案 3 :(得分:1)
您可以使用我创建的这个功能
function validCSS(property, value){
var $el = $("<div></div>");
$el.css(property, value);
return ($el.css(property) == value);
}
https://gist.github.com/dustinpoissant/7828a80d2899c57d92472b59675fc3fa
console.log(validCSS("width", "FooBar")); // false
console.log(validCSS("width", "100px")); // true
答案 4 :(得分:1)
我可能想到的快速解决方案是使用CSS.supports函数。 也可以与香草js一起使用。 就是这样:
CSS.supports(propertyName, propertyValue)
CSS.supports('color','red')
//True.
CSS.supports('color', '#007')
//True.
CSS.supports('color', 'random')
//False.
CSS.supports('colours', 'red')
//False.
我认为不需要生成一个辅助函数,因为这非常简单。
答案 5 :(得分:-3)