Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.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 prop()不';有些属性不起作用_Javascript_Jquery - Fatal编程技术网

Javascript prop()不';有些属性不起作用

Javascript prop()不';有些属性不起作用,javascript,jquery,Javascript,Jquery,我的html页面上有以下元素: <ul class="form-tabs"> <li class="active" data-bind="blah-blah-blah-1"> <li class="" data-bind="blah-blah-blah-2"> </ul> 日志中有两个未定义的。说明:对于尚未设置的属性值,或者如果匹配集没有元素,则返回未定义的。但是,请稍候,我的具有数据绑定属性!另外,当我尝试使用.prop('c

我的html页面上有以下元素:

<ul class="form-tabs">
    <li class="active" data-bind="blah-blah-blah-1">
    <li class="" data-bind="blah-blah-blah-2">
</ul>
日志中有两个
未定义的
。说明:对于尚未设置的属性值,或者如果匹配集没有元素,则返回
未定义的
。但是,请稍候,我的
  • 具有
    数据绑定
    属性!另外,当我尝试使用
    .prop('class')
    时,它可以完美地为我提供
    “活动的”

    我说“好”,然后写下:

    $("ul.form-tabs > li").each(function (index, element) {
      console.log(element.prop('data-bind'));
    });
    
    现在我有一个错误:
    TypeError:element.prop不是函数

    所以,问题是:我做错了什么

    另外,我使用jquery1.10.1和knockout。这会是一场冲突吗

    p.p.S.感谢所有人,此代码工作完美:

    $("ul.form-tabs > li").each(function (index, element) {
      console.log($(element).attr('data-bind'));
    });
    

    “属性”和“属性”之间有区别。“属性”是直接在DOM节点上可用的东西;诸如“id”、“名称”、“标记名”等都是属性

    HTML解析器无法识别为特定标记的标准属性的属性在DOM节点上不能作为属性使用。相反,必须通过
    .setAttribute()
    .getAttribute()
    访问它们。在jQuery术语中,这意味着使用
    .attr()
    而不是
    .prop()

    data-*
    属性的“家族”有点特殊,因为当请求相应的数据键时,jQuery
    .data()
    机制将隐式地从这些属性中获取值。但是,它将通过
    setAttribute()
    更新属性值。您是否需要它取决于代码的工作方式。当涉及的属性打算由另一个库解释时,那么这些更新需要如何工作取决于该库;可能根本不可能以这种方式处理问题,因为在最初处理元素之后,另一个库可能不会注意DOM属性值

    无论如何,当使用
    .data()
    访问
    数据-*
    属性时,jQuery希望键看起来像
    数据-
    前缀后面的属性名称部分。为了(我猜)方便起见,jQuery将把数据键的驼峰大小写版本视为等同于破折号分隔的版本。也就是说,如果HTML元素看起来像

    <div id=x data-some-thing=whatever>
    

    另一件需要注意的事情是:有时,将DOM节点属性的值作为属性值而不是属性值获取会得到不同的结果。一个重要的例子是
    元素的
    href
    属性或
    标记的
    操作
    属性。属性值(无论如何,在大多数浏览器中;可能全部)将被“规范化”,以反映在激活标记时将使用的实际URL。另一方面,属性值将保留最初从HTML源解析的内容。当客户端代码将自己的解释强加给这些类型的属性时,这一点很重要

    您做错的第一件事是将属性和属性混为一谈。它们之间并不总是1:1的连接

    使用
    jQueryObject.data('bind')
    读取
    data bind
    属性的值

    第二件你做错了的事是期望jQuery
    中的
    this
    每个
    循环都是一个jQuery对象。它不是,它将是一个DOM对象

    使用
    jQuery(this).data('prop')
    使用
    data()

    $('ul.form-tabs > li').each(function() {
      console.log($(this).data('bind'));
    });
    

    请尝试
    $(元素)。prop()
    .prop()
    应该用于属性
    .attr()
    更适合于
    数据绑定
    使用
    .data('bind')
    来获取数据绑定属性。还请注意Quentin的观察,您试图将DOM节点引用当作jQuery对象来使用。您知道Knockout是否会注意到它的一个指导属性的更新,就像这样吗?编辑-等待;也许这是今天关于更新这样的属性的另一个问题;这篇文章没有提到。
    var withDashes = $("#x").data("some-thing");
    var camelCase = $("#x").data("someThing");
    
    $('ul.form-tabs > li').each(function() {
      console.log($(this).data('bind'));
    });