2

この属性を使用してdata文字列と数値を DOM ノードに格納し、JavaScript で読み取ります。残念ながら、 のすべての値はdataset文字列として保存されます。したがって、それらを数値に変換し、文字列を残す最良の方法は何ですか。

html:

<input data-minvalue="10" data-startcolor="#00ee00"/>

期待される結果:

{
  minvalue: 10,
  startcolor:'#00ee00'
}

編集:

  • int と float で動作する必要があります
  • 「12_test」を変換しないでください
  • 「.3」を変換する必要があります
4

5 に答える 5

4

値の前にを付けます+。これにより、ネイティブに数値に変換され、 のようなものが保持されますが、そうでは12_testありparseFloatません。結果が の場合は、isNaN代わりに文字列を安全にします。

function kittenBaloon(str) {
    var num = +str;

    if(isNaN(num)) {
        return str;
    } else {
        return num;
    }
}

console.log(kittenBaloon('12_test'));
console.log(kittenBaloon('.3'));
console.log(kittenBaloon('#00ee00'));
于 2012-10-25T12:51:51.967 に答える
2

この関数を使用して、Number数値を解析します。数値でない場合は、を取得しNaNます。

var dataset = el.dataset;
var data = {};
Object.keys(dataset).forEach(function (key) {
  var num = Number(dataset[key]);
  data[key] = isNaN(num) ? dataset[key] : num;
})
于 2012-10-25T12:54:38.393 に答える
1

属性を解析してチェックするisFiniteだけでは不十分な場合は、数値として解析するかどうかを正規表現でテストする必要があります。

var obj = {};
for (var i=0; i<node.attributes.length; i++) {
    var attr = node.attributes.length;
    if (attr.name.substr(0, 5) == "data-")
        obj[attr.name.substr(5)] = /^[+-]?(\d*\.)?\d+(e[+-]?\d+)?$/i.test(attr.value)
          ? parseFloat(attr.value)
          : attr.value;
    }
}

この正規表現は、EcmaScript §9.3.1にある数値文字列の文法に基づいています。ただし、たとえば空白は許可されません。

于 2012-10-25T12:40:14.593 に答える
0
var string1 = "#456456";
var string2 = "546.789";

var filterString = function (string) {
    var temp = string;
        regex1 = /\./;
        regex2 = /\D/g;

    temp = temp.replace(regex1, '');

    if (!regex2.test(temp)) {
        return parseFloat(string);

    }

    return string;

}

string1 = filterString(string1);
string2 = filterString(string2);

console.log(typeof string1); //returns string
console.log(typeof string2); //returns number
于 2012-10-25T12:54:28.523 に答える
0

parseInt()メソッドを使用します。

htmlからdata-minvalueのattr値を取得した後、それをparseInt()に渡し、それをオブジェクトの値として使用します。

jqueryの使用を想定

var obj = {};
var strNum = $('selector').attr('data-minvalue);
var intNum = parseInt(strNum);
obj.minvalue = intNum;
于 2012-10-25T12:35:24.113 に答える