Javascript 无法在.data()方法中设置数字
我试图使用jQuery中的Javascript 无法在.data()方法中设置数字,javascript,jquery,html,Javascript,Jquery,Html,我试图使用jQuery中的.data()方法动态地将一个数字设置为我的数据类型,但到目前为止没有成功。这是使用.attr()方法实现的,正如我在下面列出的。为什么.data()方法不能处理数字 var container = $(this).find('#container'); // element which should have the data 尝试1: container.data(24, "opacity:0;"); 尝试2: container.data("24", "opa
.data()
方法动态地将一个数字设置为我的数据类型
,但到目前为止没有成功。这是使用.attr()
方法实现的,正如我在下面列出的。为什么.data()
方法不能处理数字
var container = $(this).find('#container'); // element which should have the data
尝试1:
container.data(24, "opacity:0;");
尝试2:
container.data("24", "opacity:0;");
以下代码使用.attr()
:
我的个人密码:
function loader($div, $page) {
$div.load(siteURL + $page + '/ #container', function() {
var container = $(this).find('#container');
container.data("24", "opacity:0;");
container.attr("data-24", "opacity:0;"); //this works...
});
}
loader($('section#about'), 'about');
更新
:这是一个容器。数据(“24”,“不透明度:0;”)代码>工作正常吗?第一个参数必须是字符串(根据jQuery规范)。container.data(“24”,“不透明度:0;”)代码>工作正常吗?第一个参数必须是字符串(根据jQuery规范)。因为data()
方法需要一个字符串
因此,我想如果你给它一个数字,它就会断了 因为data()
方法需要一个字符串
因此,我想如果你给它一个数字,它就会断了 jQuery通过在单独的数据结构中跟踪使用data()方法设置的值来支持data()方法。这允许您使用API存储对象之类的东西
在检索数据时,API将检查数据属性及其内部存储中的值
但是,设置仍然直接进入内部存储
由于问题发生了重大变化:
$。发送数字时,数据将失败
在控制台中执行此操作时,您将看到以下内容(这些内容都不会影响元素本身的标记):
这些都不会影响元素本身的数据属性。标记的最终结果将是:
<div>Hello</div>
成功呼叫的最终结果将是:
<div data-24="opacity:0">Hello</div>
你好
历史上,jQuery通过在单独的数据结构中跟踪使用data()方法设置的值来支持data()方法。这允许您使用API存储对象之类的东西
在检索数据时,API将检查数据属性及其内部存储中的值
但是,设置仍然直接进入内部存储
由于问题发生了重大变化:
$。发送数字时,数据将失败
在控制台中执行此操作时,您将看到以下内容(这些内容都不会影响元素本身的标记):
这些都不会影响元素本身的数据属性。标记的最终结果将是:
<div>Hello</div>
成功呼叫的最终结果将是:
<div data-24="opacity:0">Hello</div>
你好
您可以尝试使用jQuery对象本身吗:
var container = $(this).find('#container');
jQuery.data(container, "24", "opacity:0;");
alert("24 is equal to: " + jQuery.data(container, "24") );
您应该注意,这不会影响DOM,因为它使用jQuery的本地存储
jsidle:您可以尝试使用jQuery对象本身吗:
var container = $(this).find('#container');
jQuery.data(container, "24", "opacity:0;");
alert("24 is equal to: " + jQuery.data(container, "24") );
您应该注意,这不会影响DOM,因为它使用jQuery的本地存储
JSFiddle:实际上对我有用
这也取决于jQuery的版本。当您作为setter调用.data
时,所有版本都将调用.split
或.replace
,它们是字符串
方法,而不是数字
方法。使用.data(24)
作为访问器似乎在1.8版之后仍然有效
这也可能取决于浏览器,因为在某些浏览器中,数据集
不可用
我的建议是对数据使用描述性名称,而不仅仅是数字(除非您谈论的是form 24或其他什么,但为什么不使用form24
?)
编辑:如果属性在元素上可用,则使用.data
不会更改HTML。使用.attr
始终设置一个属性,该属性将改变HTML。这与使用字符串和数字无关。实际上对我很有用
这也取决于jQuery的版本。当您作为setter调用.data
时,所有版本都将调用.split
或.replace
,它们是字符串
方法,而不是数字
方法。使用.data(24)
作为访问器似乎在1.8版之后仍然有效
这也可能取决于浏览器,因为在某些浏览器中,数据集
不可用
我的建议是对数据使用描述性名称,而不仅仅是数字(除非您谈论的是form 24或其他什么,但为什么不使用form24
?)
编辑:如果属性在元素上可用,则使用.data
不会更改HTML。使用.attr
始终设置一个属性,该属性将改变HTML。这与使用字符串和数字无关。skrollr不使用jQuery的.data
函数,它解析DOM元素属性列表,这就是为什么使用.attr(“data-24”
将属性添加到DOM属性列表时起作用
.data(“24”,“somevalue”)
不更新DOM元素属性列表
然而,.attr(“data-24”,“somevalue”)
会更新domelemetns属性列表,允许skrollr解析新样式
从第343行开始:
// Error
$('div').data(24, 'foo')
TypeError: Object 24 has no method 'replace'
// Success
$('div').data("24", 'foo')
b.fn.b.init[966]
$('div').data("24")
"foo"
// Success
$('div').data("24", 24)
b.fn.b.init[966]
$('div').data("24")
24
//Iterate over all attributes and search for key frame attributes.
var attributeIndex = 0;
var attributesLength = el.attributes.length;
for (; attributeIndex < attributesLength; attributeIndex++) {
var attr = el.attributes[attributeIndex];
if(attr.name === 'data-anchor-target') {
anchorTarget = document.querySelector(attr.value);
if(anchorTarget === null) {
throw 'Unable to find anchor target "' + attr.value + '"';
}
continue;
}
//Global smooth scrolling can be overridden by the element attribute.
if(attr.name === 'data-smooth-scrolling') {
smoothScrollThis = attr.value !== 'off';
continue;
}
//Global edge strategy can be overridden by the element attribute.
if(attr.name === 'data-edge-strategy') {
edgeStrategy = attr.value;
continue;
}
var match = attr.name.match(rxKeyframeAttribute);
if(match === null) {
continue;
}
var constant = match[1];
//If there is a constant, get it's value or fall back to 0.
constant = constant && _constants[constant.substr(1)] || 0;
//Parse key frame offset. If undefined will be casted to 0.
var offset = (match[2] | 0) + constant;
var anchor1 = match[3];
//If second anchor is not set, the first will be taken for both.
var anchor2 = match[4] || anchor1;
var kf = {
offset: offset,
props: attr.value,
//Point back to the element as well.
element: el
};
keyFrames.push(kf);
//"absolute" (or "classic") mode, where numbers mean absolute scroll offset.
if(!anchor1 || anchor1 === ANCHOR_START || anchor1 === ANCHOR_END) {
kf.mode = 'absolute';
//data-end needs to be calculated after all key frames are know.
if(anchor1 === ANCHOR_END) {
kf.isEnd = true;
} else {
//For data-start we can already set the key frame w/o calculations.
//#59: "scale" options should only affect absolute mode.
kf.frame = offset * _scale;
delete kf.offset;
}
}
//"relative" mode, where numbers are relative to anchors.
else {
kf.mode = 'relative';
kf.anchors = [anchor1, anchor2];
}
}
//迭代所有属性并搜索关键帧属性。
var attributeIndex=0;
var attributesLength=el.attributes.length;
对于(;attributeIndex