如何使用jQuery从SPAN元素中提取名称属性?

时间:2013-07-01 19:17:03

标签: javascript jquery html greasemonkey

我有一个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”后面的数字和跨度的文本。

我将使用这些值填充数组并将其发送以进行处理。我可以做的大部分工作,但抓住nameid属性一直是个问题。

这就是我现在所拥有的:

// 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(),但我似乎无法获得该名称,或者甚至是属性。

3 个答案:

答案 0 :(得分:2)

请注意:

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

全部放在一起;使用(See it in action at 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);

对于示例跨度,此代码在控制台中提供此结果:

4
[ ["45", "16"], ["46", "10"], ["47", "11"], ["48", "5"] ]

答案 1 :(得分:1)

使用此:

atr = $(this).attr('name');

答案 2 :(得分:1)

  

&#34;每个元素都需要两个值。我需要   &#34; spnMX&#34;之后的数字以及跨度的文本。&#34;

<span>个元素不允许name属性btw。

看到您的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 here.