-1

一般来说,我对 Userscripts 和 JavaScript 有点陌生,而且我很迷茫。

基本上我想要做的是通过使用getElementsByClassName获得的元素,获取“name”属性中的数据,查看它是否包含某些内容,如果包含,将类名更改为其他内容。

在伪ish代码中:

items = getElementsByClassName("item1");

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

如果有人能给我一些关于如何做到这一点的提示,那就太棒了。

4

3 回答 3

1

试试这个:

// get all items with class 'item1'
var items = document.querySelectorAll('.item1');
var length = items.length;
for (var i = 0; i < length; i++) {
    // save reference to current item
    var item = items[i];
    // check if name contains 'Hi'
    if (item.getAttribute('name').indexOf('Hi') !== -1) {
        // update class
        item.className += ' item2';
    }
}

演示:http: //jsfiddle.net/vpetrychuk/9zBnn

于 2013-03-23T16:03:08.843 回答
0

Vitaliy 的回答是正确的,但值得一提的是 document.querySelectorAll (a NodeList) 返回的对象可以转换为 JavaScript Array,以便使用 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';
    });

就个人而言,我发现这些高阶 Array 函数更易于使用。

于 2013-03-23T16:09:00.553 回答
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 回答