2015-11-19 57 views
0

我有这段代码正常工作,直到我从“_”转换为驼峰案例。下面是代码:使用具有数据属性的JQuery的骆驼案例的问题

//Selecting the form id 
formSelector = "#" + formId; 

//Selecting all input/select/textarea fields with data- attributes 
elementSelector = formSelector + " input[data-errArrow], " + 
    formSelector + "  select[data-errArrow],  " + formSelector 
    + " textarea[data-errArrow]"; 

//For each selected element... 
$(elementSelector).each(function(index,element) { 
    console.log($(this).prop("tagName")); 
    console.log($(this).attr("data-errArrow")); 
    console.log($(this).data("errArrow")); 
    ... 
} 

控制台输出是:

INPUT 
mylib.js:25 R 
mylib.js:26 undefined 

如果数据errArrow属性的值被正确地显示为“R”,应该。数据该元素的不也显示相同的结果?为什么没有定义。在与数据属性相关的JQuery文档中,有关于骆驼大小写的一些讨论here。它说:

“如果没有数据与传递的键存储在一起,jQuery在元素的属性中搜索,将驼峰字符串转换为虚线字符串,然后将数据前置到结果中。字符串lastValue被转换为数据最后一个值。“

我不明白这可能适用于上面。我需要解决这个问题。我想要.data在示例中返回'R'。

+1

正确的模式是'数据ERR-arrow' 。你为什么不改变你的属性? –

+0

但是,您可以使用正确的模式尝试数据:'$(this).dataset.errArrow' –

+0

@Marcos Perez Gude,旧式浏览器不支持本地.dataset。正如你所建议的那样,我可能会回到非camelCase。 – Sam

回答

2

data-err-arrow="valuehere"将返回值:

.data('errArrow') 

data-errArrow="valuehere"因为没有破折号将返回:

.data('errarrow'); 

因为没有冲刺的关键就变换为全部小写。

http://jsfiddle.net/txo5sxp0/

这不是jQuery的代码,但只是给你的它是做什么的想法:

function CamelCase(str) { 

    var key; 
    var data = str.split("-"); 

    for (i = 0; i < data.length; i++) { 
     if (i == 0) { 
      key = data[i].toLowerCase(); 
     } else { 
      key += (data[i].charAt(0).toUpperCase() + data[i].slice(1)).toString(); 
     } 
    } 
    return key 
} 

var datakey = 'err-arrow'; 
var datakey2 = 'errArrow'; 

console.log(CamelCase(datakey)); //returns errArrow 
console.log(CamelCase(datakey2)); //returns errarrow 

http://jsfiddle.net/5jum59s4/

+0

我恢复了它的名称为数据错误箭头。但这确实是我正在寻找的解释和答案。 – Sam