塗りつぶし画像を VML に格納する VML 要素にアクセスしたい。以下にデモコードを貼り付けました。raphael.jsとjquery.jsを含めた場合にのみ機能することに注意してください。
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<title>Raphael Test</title>
<script type="text/javascript" src="js/libs/jquery.js"></script>
<script type="text/javascript" src="js/libs/raphael.js"></script>
<script type="text/javascript">
$(document).ready(function() {
var raphael, path, pattern;
raphael = Raphael(document.getElementById('raphael'), 500, 500);
path = raphael.circle(100, 100, 80);
path.attr('stroke-width', 3);
path.attr('fill', 'url(http://3.bp.blogspot.com/_M4WdA9j-b-g/TLMF9JJJwcI/AAAAAAAAAV4/p0Y_Wo3S3sQ/s1600/Landscape1.jpg)');
pattern = $(path.node).attr('fill');
if(pattern) {
pattern = pattern.replace('url(', '').replace(')', '');
pattern = $(pattern);
}
// Shape element documentation: http://msdn.microsoft.com/en-us/library/hh846327(v=vs.85).aspx#shape_element
// Fill element documentation: http://msdn.microsoft.com/en-us/library/bb229596(v=vs.85).aspx
if(Raphael.vml) { // SVG not supported (IE7 & IE8) and it doesn't work :/
console.log($(path.node).find('fill').attr('href'));
}
else { // SVG supported and it prints correct URL
console.log($(pattern).find('image').attr('href'));
}
});
</script>
</head>
<body>
<div id="raphael"></div>
</body>
</html>
SVG では、pattern 要素を使用して塗りつぶし画像が提供されます。そのため、この要素を取得していて、その href 属性に簡単にアクセスできます。
VML はかなり異なります。パスは、内部に fill 要素を持つ shape 要素で作成されます。残念ながら、fill 要素には属性がありません:/
VML 塗りつぶし画像要素にアクセスするのを手伝ってくれる人はいますか?