jQuery - 属性值未定义

时间:2012-07-26 11:46:49

标签: jquery selenium-rc

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来循环。

3 个答案:

答案 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');