0

我正在使用 jQuery 1.3.2,并且正在尝试在 svg DOM 元素中选择一些元素。

$('svg > defs > lineargradient')

但是由于某种原因它没有选择它,我知道我可以访问 <svg> 元素中的其他项目,因为我已成功检索到 $("svg > rect")。

我的 SVG DOM 如下所示:

<svg width="975" height="385">
    <defs>
       <lineargradient id="raphael-gradient-0" x1="1.000" y1="1.000" x2="0.000" y2="0.000">
          <stop offset="0%" stop-color="#242b62"/><stop offset="9.090909090909092%" stop-color="#174a88"/>
          <stop offset="18.181818181818183%" stop-color="#0e60a3"/><stop offset="27.272727272727273%" stop-color="#0b66ab"/>
          <stop offset="36.36363636363637%" stop-color="#0870b7"/>
       ...
       </lineargradient>
       <lineargradient id="raphael-gradient-1" x1="1.000" y1="1.000" x2="0.000" y2="0.000">...</lineargradient>

    </defs>
    <circle cx="50" cy="40" r="10" fill="#ff0000" stroke="#000" transform=""/>
    <rect x="0" y="0" width="975" height="385" fill="url(#raphael-gradient-1)" stroke="none" transform="" style="opacity: 1;" opacity="1" fill-opacity="1"/>
</svg>

jQuery 1.3.2 不能选择 <lineargradient> 元素有什么原因吗?

4

1 回答 1

1
alert($('svg lineargradient').length);

工作演示

编辑:

看起来>直接子表达式不起作用,但是如果您指定一个没有这个的选择器(如果可能的话),它在 Firefox 中很好(但不是IE)。以下在 IE 中确实有效(在 IE7 中测试)

alert($('lineargradient').length);

显然,这将<lineargradient>稍微难以在页面上选择您想要的元素,但是像slice()and这样的命令eq()将允许您通过包装集中的位置到达它们。

为Sizzle选择器引擎编写您自己的过滤器可能会产生您想要的结果。

于 2009-09-18T15:48:28.137 回答