2011-05-09 149 views
1

我需要找到一个元素,它可以动态创建并且是DOM的一部分,并且可以改变它的一些属性。我正在尝试使用svg元素,但是您在Javascript/Jquery中的专业知识会对我有所帮助。Javascript/jquery属性选择器

<svg id="cvs" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" > 
    <rect uid="id1" class="cont" x="0" y="0" width="200" height="200" /> 
</svg> 

在运行时,我想补充一些更多的矩形元素,如

var el = document.createElementNS(svgNS,'rect'); 
     //set the attribues including uid //say id2, id3 etc 
    svg.appendChild(el); 

现在,我需要写一个更新的方法,它基于的UID RECT elelement匹配,将所有的attribues。

updateRect = function(properties){ 
     $('rect[uid="' + properties.uid + '"]') { 
     for (var p in properties) { 
      this.setAttribute(p,prop[p]); 

     } 
} 

};

这是更多的伪代码来显示我的意图。我不确定它是否也会找到动态创建的元素。有更好的逻辑吗?我不必使用jQuery,但任何JS索尔将不胜感激。


编辑1: 选择器可工作,但我在有点失落哪能链中的选择对象上的操作。

类似,

var el = $('rect[uid="' + properties.uid + '"]') 
if el.exist() { 
//do the operation 
} 

或者更好的办法???谢谢... 谢谢, bsr。

+1

为什么不把引用保留在使用uid作为属性名称(键)的对象中?然后你只需查找对象上的属性,就可以参考,不需要笨重的选择器。 – RobG 2011-05-09 01:54:30

+0

Rob ..这是一个很好的评论..让我想想如何在我的代码中实现...谢谢 – bsr 2011-05-09 02:01:15

回答

1

IIUC布莱恩你想要做的事情是:

updateRect = function(properties){ 
    $('rect[uid="' + properties.uid + '"]').each(function(i, el) { 
     for (var p in properties) { 
      el.setAttribute(p,prop[p]); 
     } 
    }); 
}; 

updateRect = function(properties){ 
    $('rect[uid="' + properties.uid + '"]').each(function() { 
     for (var p in properties) { 
      this.setAttribute(p,prop[p]); 
     } 
    }); 
}; 

取决于您是要处理jQuery包装器还是DOM元素。

+0

非常感谢你..如果我确定只有一个元素通过jQuery选择器(uid = unique id)返回,是否有一种方法可以避免每个,并且仍然链接操作..为了学习的缘故..谢谢再次 – bsr 2011-05-09 02:12:21

+0

嗨,很高兴它的工作。我不是一个普通的jQuery用户,但是如果在概念上可以有多个结果,'$'函数将返回一个列表,所以我认为你不能在这里避免使用'each',因为可能存在每个SVG规则具有相同的'uid'的多个'rect'。但不要把这个词当作绝对的。 – entonio 2011-05-09 18:21:35

1

当然应该发现任何新添加的DOM元素 - 不知道为什么它不会选择它..

我会去到萤火虫,而仅仅键入

$(“矩形”),看看如果有的话显示出来,然后看看属性,看看什么东西上

+0

。谢谢你的帮助..可以ü请帮助我显示如何链接对所选对象的行动...我更新了问题.. – bsr 2011-05-09 01:55:51

+0

你console.log(p)和日志(prop [p])?值如何注册? – Atticus 2011-05-09 02:00:35