我有一个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”后面的数字和跨度的文本。
我将使用这些值填充数组并将其发送以进行处理。我可以做的大部分工作,但抓住name
或id
属性一直是个问题。
这就是我现在所拥有的:
// 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()
,但我似乎无法获得该名称,或者甚至是属性。
答案 0 :(得分:2)
请注意:
.attr
有效; .Attr
不是。.map()
Doc循环中的this
不是jQuery对象。因此,为了使用像.attr()
这样的jQuery函数,您需要$(this).attr()
。.map()
在映射数组方面非常强大,但它返回一个jQuery对象。使用.get()
作为最终结果。id
,id
与name
(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.
});
现在你有了这些变量,你应该找到其余的任务:)