Использование jQuery для выбора пользовательских fbml-подобных тегов - PullRequest
3 голосов
/ 28 января 2011

FBML использует теги типа <fb:like></fb:like> <fb:board></fb:board> и т. Д.

Как они выбирают их? Я пробовал $('fb') и $('fb:like'), оба возвращают пустой объект ... кто-нибудь знает, как это можно сделать для и?

Ответы [ 2 ]

13 голосов
/ 28 января 2011

например это,

<fb:like href="http://google.com" layout="box_count" show_faces="false" width="450"></fb:like>


цитируемый

/*

If you wish to use any of the meta-characters 
( such as !"#$%&'()*+,./:;?@[\]^`{|}~ ) as a literal part of a name, 
you must escape the character with two backslashes: \\. For example, 
if you have an an element with id="foo.bar", you can use the selector 
$("#foo\\.bar"). 

*/

демо

0 голосов
/ 28 января 2011

Ваша проблема может заключаться в том, что jQuery не использует "* NS" разновидность селекторов DOM (например, getElementsByTagName против getElementsByTagNameNS).

Я недавно написал хак для внедрения jQueryэта возможность (особенно для контекста XHTML).Вы можете адаптировать его под свои нужды:

https://gist.github.com/352210

/**
* Hack to allow jQuery to work within XHTML documents that define an xmlns
*/

/**
* Use the given object to override the given methods in its prototype
* with namespace-aware equivalents
*/
function addNS(obj, methods) {
    var proto = obj.constructor.prototype;
    var ns = document.documentElement.namespaceURI;

    for (var methodName in methods) {
        (function () {
            var methodNS = proto[methodName + "NS"];

            if (methodNS) {
                proto[methodName] = function () {
                    var args = Array.prototype.slice.call(arguments, 0);
                    args.unshift(ns);
                    return methodNS.apply(this, args);
                };
            }
        })();
    }
}

// Play nice with IE -- who doesn't need this hack in the first place
if (document.constructor) {
    // Override document methods that are used by jQuery
    addNS(document, {
        createElement: 1,
        getElementsByTagName: 1
    });

    // Override element methods that are used by jQuery
    addNS(document.createElement("div"), {
        getElementsByTagName: 1,
        getAttribute: 1,
        getAttributeNode: 1,
        removeAttribute: 1,
        setAttribute: 1
    });
}
...