svg元素的Html代码:
<image xlink:href="start.gif" style="pointer-events:none" x="165" y="175" width="100" height="100" stroke-width="1" transform=" scale(1 1) translate(0 0)"/>
就像POC一样,
$('image').attr('xlink:href');
会将属性值返回为start.gif
。
现在我需要所有图像元素的属性值,所以我写了一个函数
function script()
{
var result = new Array();
var elements = selenium.browserbot.getCurrentWindow().jQuery('image');
for(var i = 0 ; i < elements.length ; i++)
{
result[i] = $(this).attr('xlink:href');
}
return result;
}
script();
但这会返回undefined
为什么会这样?
是的,我确实尝试过使用jQuery的$ .each(函数(键,值)),但selenium抛出“错误:引发异常:c.call不是函数”。不明白c和call是指什么,所以想用js来循环。
答案 0 :(得分:2)
使用jQuery .each
并尝试使用$(this)
var elements = selenium.browserbot.getCurrentWindow().jQuery('image');
elements.each(function(i) {
result[i] = $(this).attr('xlink:href');
});
答案 1 :(得分:1)
为什么会这样?因为this
不是您认为(或希望它)在该函数范围内的。在不知道确切上下文的情况下,this
可能指向窗口,或其他元素,或对象的实例。
您有elements
数组中存储的图像列表,并且您想要创建一个jQuery对象,其中包含存储在该数组的索引i
的图像,因此请使用$(elements[i])
比$(this)
。
我预计发生的事情是,在您最初尝试使用$.each()
失败后,您将其修改为标准的Javascript for
循环,但将this
的(现在不正确)用于引用迭代中的当前元素。
答案 2 :(得分:0)
尝试:
result[i] = $(elements[i]).attr('xlink:href');