Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法在.data()方法中设置数字_Javascript_Jquery_Html - Fatal编程技术网

Javascript 无法在.data()方法中设置数字

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

我试图使用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", "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