0

jQuery で動的に使用するメソッドnumberとしてa を設定しようとしていますが、これまでのところうまくいきません。これは、以下にリストした方法を使用して機能します。メソッドが数値で機能しないのはなぜですか?data type.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()ます。

container.attr("data-123", 1223);

私の個人的なコード:

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'); 

UPDATE: ここにjsFiddleがあります

4

6 に答える 6

2

歴史的に、jQuery は別のデータ構造でそれを使用して設定された値を追跡することにより、data() メソッドをサポートしていました。これにより、API を使用してオブジェクトなどを保存することができました。

データを取得する際、API はデータ属性とその内部ストアの値をチェックします。

ただし、設定は引き続き内部ストアに直接送信されます。

質問が大幅に変更されたため:

$.data は数値の送信に失敗します。

コンソールでこれを行うと、次のように表示されます (要素自体のマークアップには影響しません)。

// 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

これらのいずれも、要素自体のデータ属性には影響しません。マークアップの最終結果は次のようになります。

<div>Hello</div>

要素に属性を設定する場合data-xxx、またはその属性を設定する場合、要素の属性はアルファベット文字で開始する必要があります。

// Error
$('div').attr("24", "opacity:0")
InvalidCharacterError: An invalid or illegal character was specified, such as in an XML name.

// Success
$('div').attr("data-24", "opacity:0")
b.fn.b.init[966]

成功した呼び出しの最終結果は次のようになります。

<div data-24="opacity:0">Hello</div>
于 2013-08-28T16:39:32.307 に答える
0

jQuery オブジェクト自体を使用してみてください:

var container = $(this).find('#container');

jQuery.data(container, "24", "opacity:0;");

alert("24 is equal to: " + jQuery.data(container, "24") );

jQuery のローカル ストレージを使用するため、DOM には影響しないことに注意してください。

JSFiddle: http://jsfiddle.net/markwylde/8Q5Yh/1/

于 2013-08-28T16:40:31.513 に答える
0

container.data("24")実際に私のために働きます。

jQueryのバージョンにも依存します。.dataセッターとして呼び出すと、すべてのバージョンで、メソッドではなくメソッドである.splitまたは のいずれかが呼び出されます。アクセサーとして使用すると、バージョン 1.8 以降で機能するようです。.replaceStringNumber.data(24)

一部のブラウザでは利用できないため、これはブラウザに依存する場合もありdatasetます。

私のアドバイスは、単なる数字ではなく、データにわかりやすい名前を使用することです (フォーム 24 などについて話している場合を除きますが、使用しないのはなぜですかform24?)


編集:属性が要素で使用可能な.data場合、使用しても HTML は変更されません。datasetalwaysを使用.attrすると、HTML を変更する属性が設定されます。これは、文字列と数値の使用とは関係ありません。

于 2013-08-28T16:40:36.060 に答える
0

container.data("24", "opacity:0;");正しく動作しますか?最初のパラメーターは文字列でなければなりません (jQuery 仕様による)。

于 2013-08-28T16:38:20.810 に答える
0

data()メソッドは文字列を想定しているためです。

したがって、数値を渡すと壊れると思います!

于 2013-08-28T16:38:21.083 に答える