Подтвердить что ты не робот

Как работает jQuerys.text(), внутренне?

Я быстро попытался найти реализацию в источнике jQuerys, но нашел этот, который фактически не описывает его полностью.

Из источника jQuery

jQuery.fn.extend({
    text: function( text ) {
        if ( jQuery.isFunction(text) ) {
            return this.each(function() {
                return jQuery(this).text( text.call(this) );
            });
        }

        if ( typeof text !== "object" && text !== undefined ) {
            return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
        }

        return jQuery.getText( this );
    },

Кто-нибудь знает?

Разъяснение:
Я знаю, как его использовать. Я просто хочу знать, как получить текст элемента à la jQuery, когда jQuery не доступен.

4b9b3361

Ответ 1

jQuery.fn.text может использоваться для 3-х различных целей, поскольку отчет, который вы вставили, ясно показывает. Дело, которое вы ищете, является третьим - возвращает текстовое значение элемента.

jQuery использует метод jQuery.text() для получения текстового значения элемента, а jQuery.text указывает на Sizzle.getText()

jQuery.text = Sizzle.getText;

И здесь определение функции getText.

// Utility function for retreiving the text value of an array of DOM nodes
Sizzle.getText = function( elems ) {
    var ret = "", elem;

    for ( var i = 0; elems[i]; i++ ) {
        elem = elems[i];

        // Get the text from text nodes and CDATA nodes
        if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
            ret += elem.nodeValue;

        // Traverse everything else, except comment nodes
        } else if ( elem.nodeType !== 8 ) {
            ret += Sizzle.getText( elem.childNodes );
        }
    }

    return ret;
};

Рабочий пример: http://jsfiddle.net/cBsDN/

Ответ 3

Он использует метод Sizzle getText:

// Utility function for retreiving the text value of an array of DOM nodes
Sizzle.getText = function( elems ) {
    var ret = "", elem;

    for ( var i = 0; elems[i]; i++ ) {
        elem = elems[i];

        // Get the text from text nodes and CDATA nodes
        if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
            ret += elem.nodeValue;

        // Traverse everything else, except comment nodes
        } else if ( elem.nodeType !== 8 ) {
            ret += Sizzle.getText( elem.childNodes );
        }
    }

    return ret;
};

http://sizzlejs.com/

Ответ 4

Предполагая, что вы знаете, как получить элемент в JavaScript с помощью jQuery.

var el = document.getElementById("my-element");

И тогда вам просто нужно использовать два свойства, доступные для каждого элемента innerText и innerHTML. Итак, чтобы получить текст, который вы используете:

var text = el.innerText;

Чтобы получить HTML, выполните следующие действия:

var html = el.innerHTML;

Ответ 5

Если вы знаете разные createTextNode и createElement, вы можете понять, как работать с jquery.text.

текстовая функция создает текст DOM node. Браузер будет протачивать значение node в виде текста.