-1

私は一般的に、ユーザースクリプトと JavaScript に慣れていないので、かなり迷っています。

基本的に私がやりたいことは、getElementsByClassName を使用して取得した要素を調べ、「name」属性のデータを取得し、何かが含まれているかどうかを確認し、含まれている場合はクラス名を別のものに変更することです。

疑似っぽいコードで:

items = getElementsByClassName("item1");

for each item in items {
    if(item.attribute("name").contains("Hi"))
        item.attribute("class") = "item2";
}

誰かが私がこれを行う方法についていくつかのヒントを与えることができれば、それは素晴らしいことです.

4

3 に答える 3

0

のパワーをフル活用querySelectorAll。また、DOM メソッドを使用します。class属性またはをいじらないでくださいclassName:

var items = document.querySelectorAll (".item1[name*='Hi']");

for (var J = items.length-1;  J >= 0;  --J) {
    items[J].classList.add ("item2");
}


さらに良いことに、 jQueryを使用します。

$(".item1[name*='Hi']").addClass ("item2");
于 2013-03-24T01:38:55.027 に答える
0

Vitaliy の答えは的を射ていますが、document.querySelectorAll (a NodeList) によって返されるオブジェクトを JavaScript に変換して、JavaScriptが提供する高次の配列関数Arrayを利用できることに言及する価値があります。

// Convert the `NodeList` returned by `querySelectorAll` into an `Array`.
var items = Array.prototype.slice.call(document.querySelectorAll('.item1'));

items
    .filter(function (item) {
        // Filter Array to only include items that have a name attribute
        // that beings with "Hi".
        return item.getAttribute('name').indexOf('Hi') !== -1;
    })
    .forEach(function (hiItem) {
        // Add a class to these items.
        hiItem.className += ' item2';
    });

個人的には、これらの高次配列関数の方が使いやすいと思います。

于 2013-03-23T16:09:00.553 に答える