0

这是来自一个更复杂的脚本的一部分。简而言之,我在这里尝试做两件事:

  1. 获取元素的子类名称,并从中删除单词“span”,然后将它们添加到变量中(这很好用)。
  2. 获取这些类名(完整,仍然附加“跨度”)并将它们添加到数组中。

这是我的代码:

var currentSpans = [];

$('container').children().each(function(i2, spans) {
    if (spans.className.indexOf('span') != -1) {
        total += parseInt(spans.className.replace(/[A-Za-z$-]/g, ""),10);
        currentSpans.push(spans.attr('class'));
    }

});

它打破currentSpans.push(spans.attr('class'));并说#<HTMLDivElement> has no method 'attr'

        currentSpans.push(spans.className());

正如上面使用的那样,但在这里它不起作用(虽然这是预期的)。

我在这里做错了什么?这似乎是一个足够简单的问题,但我一无所知,可能是因为我整天都在使用 jquery!

4

2 回答 2

2

spans.attr('class')应该是$(spans).attr('class')

当您访问时,spans.className您使用的是 dom 对象引用,attr()它不是 dom 对象的方法,而是 jQuery 提供的方法,因此您需要使用$(spans).

更新:

$('.row-fluid').each(function (i, ele) {
    var total = 0;
    var currentSpans = [];

    $(ele).children().each(function (i2, spans) {
        var className = $(spans).attr('class');
        var spanClass = /span\d+/.exec(className);
        spanClass = spanClass.length > 0 ? spanClass[0] : undefined;
        if (spanClass) {
            total += parseInt(spanClass.replace("span", ""), 10);
            currentSpans.push(spanClass);
        }

    });

    console.log(currentSpans, total);
});

小提琴

于 2013-01-22T11:31:12.577 回答
1

使用 jQuery 的each()函数会在回调函数中为您提供两个参数,即索引和元素。该元素还不是 jQuery 对象,因此不包含该attr()函数。

为了将它转换成一个 jQuery 对象,你需要做的就是用括号包裹它并把 jQuery 选择器放在前面。就这样spans变成了$(spans)

each()回调中,您还可以使用$(this)来引用当前项目。

spans.className为您工作,因为className它是原生 JavaScript 属性。

于 2013-01-22T11:33:32.517 回答