0

私はJavaScript関数を持っています:

function doSomething(arg) {
    var array = arg.split(',');
    // etc...
}

argjQueryの.data('myId')関数を使用して入力されます。

多くの場合、myId整数のコンマ区切りリストが含まれており、コードはうまく機能します。ただし、myId整数が1つしかない場合、コードはエラーで失敗します

オブジェクトはプロパティまたはメソッド'split'をサポートしていません

if1つの整数または空の文字列の境界条件を処理するステートメントを含めずに配列を作成するためのコンパクトで堅牢な方法はありますか?

4

3 に答える 3

2

attrは文字列を返しますがdata、値を解析して「正しい」タイプのオブジェクトを返そうとします。

foo.attr('data-myId');  //pass this instead

ただし、空の文字列を特定することはできませんif。それをチェックするか、単一の空の文字列要素を持つ配列をチェックする必要があります。

于 2013-02-25T01:25:51.090 に答える
1

2つの無関係な問題があります。

1つ目は、空の文字列の場合です。Splitは、空の文字列を含む1要素の配列を返します。それをチェックして補償するだけです。

var array;
if (arg == "") array = [];

整数が1つしかない場合は、から文字列を取得しているの.data()ではなく、実際の整数を取得していると思います。したがって、最初にそれを文字列に変換します。

else array = String(arg).split(',');

または、jQueryの魔法を避けて、属性に直接アクセスすることもできます。すべてのdata()属性は、data-接頭辞が付いた属性です。

于 2013-02-25T01:25:35.960 に答える
1

.data内容に基づいて値のタイプを推測しようとするため、数値になります。を使用できます.attr。これは、属性として使用できる場合は常に文字列を返します。または、文字列にキャストします。

('' + arg).split(',')
//or
String(arg).split(',')

どちらが好ましいかは実際にはわかりません。

''.split(',')また、 returns['']または空の文字列要素を持つ配列にも注意してください。あなたはそれを回避することができます.filter(function (elem) { return elem !== ''; })

別の可能な代替手段はdataset、要素自体で使用することです。

于 2013-02-25T01:27:17.617 に答える