如何在 SVGweb 中使用 jQuery 选择器

Posted

技术标签:

【中文标题】如何在 SVGweb 中使用 jQuery 选择器【英文标题】:How to use jQuery selectors with SVGweb 【发布时间】:2011-12-26 07:07:56 【问题描述】:

我想在 SVG 上使用 jQuery 选择器。在支持原生 SVG 的浏览器上,所有选择器都可以正常工作。 但是在浏览器上(其实我只测试了ie8),SVGweb使用的是Flash渲染器,只有一些选择器起作用,例如:

$('#id')             /* id selectors works*/
$('#id #another-id') 
$('*')                /* universal selector works */  

某些选择器不起作用:

$('path')            /* type selectors don't work */
$('.region')         /* class selectors don't work */

注意:我还没有测试其他选择器。

我的问题:如何让它们工作?

注意:如果这是不可能的,一个简短的解释(也许是针对此限制的某种解决方法)可能会获得复选标记。

【问题讨论】:

【参考方案1】:

(使用火狐)

我正在使用 embed-in-an-<object> 方法来实现跨浏览器兼容性:

<!--[if !IE]>-->
  <object data="path-to.svg" type="image/svg+xml" id="object-id">
  </object>
<!--<![endif]-->
<!--[if lt IE 9]>
  <object src="path-to.svg" classid="image/svg+xml" id="object-id">
  </object>
<![endif]-->
<!--[if gte IE 9]>
  <object data="path-to.svg" type="image/svg+xml" id="object-id">
  </object>
<![endif]-->

...然后使用&lt;object&gt; 节点的contentDocument 告诉jQuery() 这个新DOM...

var svgdoc = $('object-id').get(0).contentDocument;
var $svg = $(svgdoc).children();

...你应该能够基于$svg

var $paths = $('path',$svg);
$svg.find('rect').attr('fill','blue');

【讨论】:

是的,这适用于类型选择器,这很好 - 但它仍然不适用于像 $('.class') 这样的类选择器,是吗? 我认为它应该 -- $svg.find('.classname') 应该给你任何带有class="classname" 的元素。

以上是关于如何在 SVGweb 中使用 jQuery 选择器的主要内容,如果未能解决你的问题,请参考以下文章

如何在jquery中重写字符串以避免再次访问dom,并使用jquery选择器

如何在 jquery 的一个选择器中使用“start with”和“contain”选择器?

如何使用 Jquery 在不同的 div 中显示月份选择器

如何在 Jquery 选择器中使用变量? [复制]

如何扩展存储在变量中的 jQuery 选择器?

如何在 jQuery .siblings() 中编写选择器函数