1

我有一个 HTML 文件,我正在使用一个使用 jQuery 的greasemonkey 脚本来抓取该文件。

HTML 页面很长,但我在<span>整个页面中有许多元素。

让我们假设元素如下所示:

<span id="spnMX45" name="spnMX45" >16</span>
<span id="spnMX46" name="spnMX46" >10</span>
<span id="spnMX47" name="spnMX47" >11</span>
<span id="spnMX48" name="spnMX48" >5</span>

我需要从每个元素中获取两个值:我需要“spnMX”之后的数字和跨度的文本。

我将用这些值填充一个数组并将它们发送出去进行处理。我可以做大部分事情,但抓住nameorid属性一直是个问题。

这是我目前所拥有的:

// Grab Max Points for assessments
var maxPointsArray = $("span[id^=spnMX]").map(
    function(data){
    arr = [this.Attr('name')];
    return arr;
    }
);

console.log(maxPointsArray.length);  // yields:  9 <--actual number of span elements in test html
console.log(maxPointsArray);  // yields:  9 undefined objects

我试过了:

arr = [this.name];
arr = this.name;
arr = [this.attr('name')];
arr = this.Attr('name');

我似乎无法得到它。span属性是不能抓取的吗?我对此表示怀疑,但我无法弄清楚这一点。我已经成功地用几个不同的输入类型元素完成了这个精确的事情。我无法text()成功获取该对象的 ,但我似乎无法获得那个该死的名称,甚至 id 属性。

4

3 回答 3

2

注意:

  • Javascript(和 jQuery)区分大小写。 .attr已验证; .Attr不是。
  • this.map()Doc循环内部不是 jQuery 对象。因此,为了使用 jQuery 函数,.attr() 您需要$(this).attr().
  • jQuery.map()在映射数组方面非常强大,但它返回一个 jQuery 对象。用于.get()最终结果。
  • 由于您的 jQuery 选择器使用id, 并且 与idname无效的 HTML!)相同,请使用 id 提取该值。

把它们放在一起;使用(在 jsFiddle 中查看它):

var maxPointsArray = $("span[id^=spnMX]").map (
    function (index) {
        var text    = $.trim (this.textContent);
        var idVal   = this.id.replace (/spnMX/, "");

        //-- This will make a two-dimensional array:
        return [ [idVal, text] ];
    }
).get ();

console.log (maxPointsArray.length);  
console.log (maxPointsArray);

对于示例 span,此代码在控制台中给出了以下结果:

4
[ ["45", "16"], ["46", "10"], ["47", "11"], ["48", "5"] ]
于 2013-07-01T22:34:53.457 回答
1

用这个:

atr = $(this).attr('name');
于 2013-07-01T19:20:51.420 回答
1

“我需要从这些元素中的每一个中获取两个值。我需要“spnMX”之后的数字和跨度的文本。”

<span>元素是不允许的name属性顺便说一句。

看到您的 ID 与每个名称完全相同,您可以使用以下内容:

$("span[id^=spnMX]").each(function(){
  var text = this.innerHTML; 
    // Returns 16, 10, 11, 5. The text inside each <span>.
  var idNum = this.id.match(/[\d]+$/)[0]; 
    // Returns 45, 46, 47, 48. The parts of each ID after spnMX. 
});

现在你有了这些变量,你应该会发现剩下的任务很好:)

jsFiddle在这里。

于 2013-07-01T19:27:55.070 回答