javascript - 当样式属性在宽度或高度之后排序时,jQuery 元素创建会删除宽度和高度
问题描述
经过很长时间的搜索,我发现了这种奇怪的行为:
见小提琴:https ://jsfiddle.net/723xhcrf/
当您使用参数创建元素时,宽度和高度(可能更多)被添加到样式参数中,如下所示:
$('<div>', {'width': '50px', 'height': '50px'});
给
<div style="width: 50px; height: 50px;">
但是当你已经有了一个样式时,会根据 params 对象的键顺序发生一些奇怪的事情。
$('<div>', {'width': '50px', 'style': 'background-color:blue;', 'height': '50px'})
给
<div style="background-color: blue; height: 50px;">
和
$('<div>', {'height': '50px', 'style': 'background-color:blue;', 'width': '50px'})
给
<div style="background-color: blue; width: 50px;">
您在这里看到的是第一个宽度或高度(可能更多)被其后的样式属性覆盖。我希望这两种情况下的宽度和高度都附加到样式属性中。
所以我的解决方案是有一个对参数进行排序的函数,以便样式参数始终是参数对象中的第一个键。
有谁知道是否需要这种行为,或者这是 dom 元素的 jquery 创建中的错误?
解决方案
作为第二个参数传递的对象不仅仅是新元素的一组属性。它们更像是对 jQuery 方法的隐式调用。只有当属性名称不是 jQuery 方法时,它才会被视为简单属性。
因此,
$("<div/>", { width: "100px" })
实际上就像
let div = $("<div/">");
div.width("100px");
因此,当您还添加“样式”值时,它不会被视为方法调用。由于对象属性名称排序的工作方式,如果它出现在您的“宽度”属性之后,它将覆盖“宽度”隐式调用建立的“样式”值。
确实,控制样式的正确做法是使用“css”属性:
$("<div/>", { css: { height: "50px", width: "50px", backgroundColor: "red" } })
您还可以执行设置内容等操作:
$("<div/>", {
text: "Hello World",
id: "some-id",
css: {
height: "50px",
width: "50px",
backgroundColor: "red"
}
})
推荐阅读
- python - 当一个参数是`find "path/" -type f -name "*.xml"`时如何传递两个参数?
- python - 如何根据 Python 中的特定条件在更大的列表中分解列表?
- spring - StreamBridge Final 无法模拟
- python - Spotify API OAuth:如何退出用户登录的命令提示符
- lua - 为什么不能以表作为其键之一来初始化 Lua 表?
- reactjs - ModuleNotFoundError:找不到模块:错误:无法解析“./Select-d680feef.esm.js”
- amazon-web-services - 如何查找适用于 AMI 的实例类型列表
- compiler-errors - 目标“CMakeFiles/check_lab0”的配方在斯坦福 CS144 自学中失败
- python - 如何使用python opencv处理海康威视解码回调函数
- c++ - 如何初始化变量以解决C26495 c++