0

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(function(key, value)),但是 selenium 会抛出“错误:抛出异常:c.call 不是函数”。不明白 c 和 call 指的是什么,所以想用 js for 循环。

4

3 回答 3

2

使用 jQuery.each并尝试$(this)

var elements = selenium.browserbot.getCurrentWindow().jQuery('image');
elements.each(function(i) {
    result[i] = $(this).attr('xlink:href');
});
于 2012-07-26T11:50:29.203 回答
1

为什么会这样?因为this在该功能的范围内不是您认为的(或希望的)。在不知道确切上下文的情况下,this可能指向窗口、另一个元素或对象的实例。

您有一个存储在elements数组中的图像列表,并且您想创建一个 jQuery 对象,其中包含存储在i该数组索引处的图像,因此请使用$(elements[i])而不是$(this).

我预计发生的情况是,在您最初尝试 using 失败后$.each(),您将其修改为标准的 Javascriptfor循环,但留下了(现在不正确的)使用 ofthis来引用迭代中的当前元素。

于 2012-07-26T12:01:54.580 回答
0

尝试:

result[i] = $(elements[i]).attr('xlink:href');
于 2012-07-26T11:49:45.810 回答