0

要素の rel 属性からプログラムのパラメーターを取得したいのですが、まず論理的ですか?

rel 属性にはこの文字列rel="_p|b|w=300|h=200"またはが含まれている可能性がrel="_p|w=300" あるため、split を使用して文字列を | で分割します。パターン :

var attr = $(this).attr('rel').split('|');

for_pb確認できるので問題ありませんindexOfが、 forwとの値が変わるhので、正規表現を使用する必要がwあります。h

indexOf で正規表現を使用するにはどうすればよいですか?

私の悪い英語でごめんなさい

編集:

if (attr.indexOf('b')) {
        blank = true;
    }
4

4 に答える 4

0

申し訳ありませんが、通常のjavascriptを使用して1つのコマンドでそれを実行する方法はありません。indexOfは正規表現をサポートしていません。

アレイをループするか、アレイjqueryに対してサポートされているコマンドを使用できます。

例:必要な配列ができたら、 http://api.jquery.com/jQuery.grep/attrを使用できます。jQuery.grep()

a_equal = jQuery.grep(attr, function(a, i){
  return (a.match(/=/) and i > 0); // modify this as you like
});

a_equalすべての割り当て引数を含む配列を作成します。

免責事項..コードはまだテストされていません。

于 2012-04-25T22:39:49.300 に答える
0

カスタム属性の使用も提案しましたが、これらは w3 準拠ではありません。

簡単な方法は、パラメータを分割してループし、各インデックスが期待する属性の 1 つであるかどうかを確認することです。

var cust_params = $(this).attr('rel').split('|'); //or this.rel as GGG suggested in a comment?

for(var i=0;i<cust_params.length;i++) {
    if('_p'==cust_params[i]) {
        //...
    }
    //...
    if(cust_params[i].match(/w=(\d+)/)) {
        //you could even do this without a regular expression
    }
}

この種のことを行うときは、もっとエレガントな方法が必要だといつも感じているので、これが私が気付いていない良い習慣に違反していないことを願っています:)これについて感じてください。

于 2012-04-25T22:29:58.563 に答える
0

パオロ・ベルガンティーノのように、データ属性を使用することもお勧めします。または、データを JSON に (再びデータ属性に) 格納して解析することもできます。

<a href="#" data-info='{"width": "300", "height": "200", "color": "#fff", "etc": "foo"}'>

var info = JSON.parse(a.getAttribute('data-info'));

編集:evalPhrogzの提案に置き換えられました。

(評価付き: eval('(' + a.getAttribute('data-info') + ')'))

于 2012-04-25T22:30:58.677 に答える
0

まず第一に、これはデータを取得するあまり洗練された方法ではありません。とにかく、本当にそのようにしたい場合は、次のように正規表現を使用できます。

var matches = $(this).attr('rel').match(/w=(\d+)/);
var w = (matches && matches[1]) || defaultValue;

また、「w」で終わる要素が複数ある可能性がある場合は、正規表現を次のように変更することをお勧めします。

var matches = $(this).attr('rel').match(/(?:^|\|)w=(\d+)/);
于 2012-04-25T22:21:18.307 に答える