IE8 и свойство объекта javascript, текст - PullRequest
0 голосов
/ 07 июня 2011

Использование .text свойства объекта в JavaScript может привести к неожиданным результатам в IE8 (пустая строка или неопределенное значение, даже если оно содержит значение).

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

Или, для надежной кросс-браузерной совместимости вы можете вместо этого использовать jquery для доступа к свойству text объекта, и я мог бы сделать это с помощью: $(this).text() См. Ответ для хорошего решения jQuery.

Оригинальный вопрос: Является ли «текст» зарезервированным словом javascript в IE8? Мне любопытно, потому что я не смог найти ни одного ресурса, который бы заявлял об этом.

* JavaScript (optionObj.innerHTML) Решение: *

// Look for a match in the section dropdown and select it.
$.each($('#' + mySelect + ' option'), function(key, optionObj) {

    // Switched 'optionObj.text' to 'optionObj.innerHTML' for cross-browser compatibility
    if (optionObj.innerHTML == strTextToMatch) {
        // Found a match
        $('#' + mySelect).val(optionObj.text);
        $('#' + mySelect).trigger('change');
    }
});

В IE8 optionObj.text иногда возвращал бы пустую строку, даже когда я видел в своем отладчике, что она содержала значение (я мог видеть, раскрыв объект optionObj)! Странно то, что в 10% случаев optionObj.text будет возвращать фактическое значение, отличное от пустой строки. Это, как говорится, optionObj.innerHTML, кажется, работает надежно.

1 Ответ

2 голосов
/ 07 июня 2011

Нет, текст не является ни зарезервированным словом, ни будущим зарезервированным словом в JScript.

http://msdn.microsoft.com/en-us/library/0779sbks(v=vs.85).aspx


Редактировать О, я вижу это сейчас.

Вы используете неправильную функцию each & mdash; $.each() вместо .each().
Вы также используете .text вместо .text(). Исправления:

var $mySelect = $('#' + mySelect);
$mySelect.find('option').each(function()
{
    var $option = $(this),
        text = $option.text();
    if (text == strTextToMatch) {
        // Found a match
        $mySelect.val(text);
        $mySelect.trigger('change');
    }
});

но угадайте, что: это совершенно не нужно. Этого будет достаточно:

var $mySelect = $('#' + mySelect),
    newVal = $mySelect.find('option:contains(' + strTextToMatch + ')').val();
$mySelect.val(newVal).change();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...