2

ここに私が実行した小さなテストがありexpect.jsます:

describe('xpath', function () {
    it('finds attribute nodes', function () {
        $(document.body).append('<string fooBar="bar"><data id="xyz"></data></string>');
        var xyz = document.getElementById('xyz');
        expect(xyz).not.to.be(null);

        var nodes = document.evaluate('../@fooBar', xyz, null, XPathResult.ANY_TYPE, null);
        var element = nodes.iterateNext();
        expect(element.nodeValue).to.equal('bar');
    });
});

Testacular を使用して Chrome と Firefox でテストしていますが、Firefox では成功しますが、Chrome では失敗しelementnull. 私にとって本当にクレイジーな部分は、fooBarjust に変更するとfoo、両方のシステムに渡されることです。Fooの代わりに使用すると、Chrome も壊れfooます。つまり、検索対象の属性に大文字が含まれていると、Chrome での XPath クエリが機能しなくなるようです。これは正常な動作ですか?何か不足していますか?それともChromeのバグですか?

更新 1

Google の Wicked Good XPath を追加したところ、Internet Explorer も動作するようになりましたが、Chrome はまだ失敗します。

更新 2

実際の属性に大文字が含まれていても、XPath 値がすべて小文字の場合、XPath クエリは Chrome で機能します。

4

1 に答える 1

1

XHTMLを使用していますか?その場合、XHTML 仕様では、すべての要素名と属性名を小文字にする必要があると規定されています。

Chrome は XPath に基づいて評価するためだけに準備されているのに対し、他のブラウザーは XML に準拠しています (どのような場合でも有効です)。

于 2013-03-01T08:03:31.930 に答える