2

私のリストには、「data-pic」、「data-audio」、「data-word」という属性があります...

<li data-audio="sounds/words/black.wav" data-pic="images/words/black.png" data-word="black"></li>

「黒」を別のものに変更する場合、HTML から新しい単語を 1 回入力するだけですべての属性を変更できる方法はありますか?

4

6 に答える 6

2

jQueryを使用する別の、おそらくより短い方法:

$.each($("li").data(), function(key, value) {
    data[key] = value.replace("black", "white");
});

フィドルの例

ただし、「黒」以外のプレースホルダー値を使用することをお勧めします。

于 2012-11-14T11:03:16.817 に答える
2

JavaScript関数を使用できます..

function writeLi(color){
    return '<li data-audio="sounds/words/'+color+'.wav" data-pic="images/words/'+color+'.png" data-word="'+color+'"></li>'
}

どのようにそのことについて?

于 2012-11-14T10:52:21.180 に答える
1

これも機能します:

var elem = $("li")[0];
var attrs = elem.attributes;
for(var i=0;i<attrs.length;i++) {
   $(elem).attr(attrs[i].nodeName,attrs[i].nodeValue.replace(/black/gi,'white'));                                               
}
​
于 2012-11-14T10:55:14.967 に答える
1

属性配列を利用できます。これは単純な例にすぎません。状況によっては、このような単純な置換以外に「黒」を置換するためのより高度な方法が必要になる場合があります。

var el = document.getElementById("yourList");
for( var i = 0, max = el.attributes.length; i < max; i++ ){
 if( el.attributes[i].nodeName.indexOf("data") > -1 ){
  el.attributes[i].nodeValue.replace("black","newValue");
 }
}
于 2012-11-14T10:54:25.750 に答える
0

次のように実行できます。

var myWord = $('li').data('word');
var newWord = 'blue';

$('li').data('word', newWord);

$('li').data('audio', $('li').data('audio').replace(myWord, newWord));
$('li').data('pic', $('li').data('pic').replace(myWord, newWord));

しかし、これは悪いアプローチです。最良の方法は次のとおりです。

$('li').data('word', 'yellow');
$('li').data('audio', 'sounds/words/yellow.wav');
$('li').data('pic', 'images/words/yellow.png');
于 2012-11-14T10:54:12.303 に答える
-1

jQuery:

$('div.#ContainerName li').each(function(a,li) {
  if(this.attr('data-word') == 'black') {
    li.attr('data-word', yourNewValueHere)
    li.attr('data-audio', yourNewValueHere1)
    li.attr('data-pic', yourNewValueHere2)
  }
});

必要に応じて、containername を使用してスコープを制限します (そうしないと、すべての LI がチェックされ、多すぎる/遅すぎる/望ましくない可能性があります)。

于 2012-11-14T10:54:19.890 に答える