iframe内の要素をxpath4jquery使って取得
xpathでドキュメントをまたいだ検索ができないということで、contextのドキュメントでcreateExpression切り替えられないか?と考えました。
で、できたのが
// xpath4jqueryの57行目辺り context = context || document; doc = (context.nodeName == '#document') ? context : context.ownerDocument; expr = doc.createExpression(expr, null);
これです。
spanやdivなどの要素は、ownerDocumentという値を持っており自分がどのドキュメントに属しているか知っている訳です。
しかし、document.ownerDocumentはnullを返すので、三項演算子で分岐。
これで、contextのドキュメントに応じてcreateExpressionするドキュメントを切り替えることができ、iframe内の要素がとってこれます。
iframe内は、ifarameのドキュメントでcreateExpressionするので、iframe内にもjavascript-xpathを読み込む必要があります。
iframeの外から、iframe内のDOMをいじりたくて、iframe内の名前空間を汚染したくないという稀な方はお試しあれ。
$($('iframe')[0].contentWinodw.document.body).xfind('div')
XPathなりRangeなりHTML要素なりを、iframe内でいろいろしたいときは、iframe内のdocumentから生成するのが無難です。
firefoxで動いたから気にしていなかったけれど、operaとsafariで怒られた。