Объект jQuery не может быть проанализирован как HTML - PullRequest
0 голосов
/ 17 июня 2011

У меня есть вызов ajax, возвращающий различные поля базы данных один за другим в цикле for. Я могу проверить, является ли поле HTML с помощью:

for(i = 0; i < copyFromSchedule.length; i++) {
    temporaryString = $(this).attr("ows_"+copyFromSchedule[i]);
    if ($(temporaryString).html() == null)
        // Is not HTML...
    else
        // Is HTML, remove any anchors found in this string (<a name="XXX"></a>)
        $(temporaryString).find("a[name]").remove();
}

В операторе else (когда строка является HTML) я пытаюсь (безуспешно) удалить все якоря HTML с помощью указанной выше функции.

Как мне манипулировать объектом как HTML через jQuery?

Обновление

При дальнейшем осмотре я понял, что проблема отличается от того, что я первоначально думал.

Моя проблема в том, что я не могу манипулировать переменной (временная строка) как объект jQuery. Например, следующее не повлияет на html объекта:

$(temporaryString).find("div").remove();

Итак, теоретически, если у меня есть следующее:

temporaryString = "<span>Span Content</span><div>DIV Content</div>";
$(temporaryString).find("div").remove();

Я бы предположил, что значение «временной строки» теперь должно равняться:

<span>Span Content</span>

, так как div удален.

Моя логика неверна? Кажется, он не работает.

Ответы [ 5 ]

3 голосов
/ 17 июня 2011

Вот ваша проблема: в Javascript строки неизменны , это означает, что их нельзя изменить.Если вы не назначите что-то другое переменной temporaryString, эта переменная не изменится.

Когда вы запустите этот код:

temporaryString = "<span>Span Content</span><div>DIV Content</div>";
$(temporaryString).find("div").remove();

Вот что происходит:

  1. "<span>Span Content</span><div>DIV Content</div>" присваивается temporaryString
  2. $(temporaryString) запускается, анализирует temporaryString и создает соответствующий массивоподобный объект (объект jQuery) из элементов html и возвращает его.temporaryString оставлено без изменений.
  3. .find("div") запустится, найдет все элементы div в результате предыдущего шага и вернет их.temporaryString остается без изменений.
  4. .remove() выполняется, удаляя элементы, возвращенные предыдущим шагом, из объекта jQuery.temporaryString оставлено без изменений.
  5. Объекты и элементы, созданные $(temporaryString).find("div").remove(), выходят из области видимости и удаляются сборщиком мусора.temporaryString все еще не был изменен.

Короче говоря, если вы ничего не делаете с результатом $(temporaryString).find("div").remove(), ничего не происходит.

Если вы хотите, чтобы temporaryString стал "<span>Span Content</span>", вам нужно присвоить результат всех ваших манипуляций с объектом jQuery обратно в переменную temporaryString.Лучший способ сделать это - создать элемент div, установить его содержимое на temporaryString, удалить нужные элементы и назначить новое содержимое элемента div обратно в temporaryString, например так:

temporaryString = $("<div>").html(temporaryString).find("div").remove().end().html();

Для исходного вопроса вы можете попробовать это:

for(i = 0; i < copyFromSchedule.length; i++) {
    temporaryString = $(this).attr("ows_"+copyFromSchedule[i]);
    if ($(temporaryString).html() == null)
        { /* Is not HTML... */ }
    else {
        // Is HTML, remove any anchors found in this string (<a name="XXX"></a>)
        temporaryString = $("<div>").html(temporaryString).find("a[name]").remove().end().html()
    }
}

Извините за длинный ответ.

0 голосов
/ 17 июня 2011

Оберните ваш temporaryString некоторой разметкой (в идеале div со специальным идентификатором), затем отнесите его к JQuery DOM, после чего вы можете удалить элемент внутри него.

0 голосов
/ 17 июня 2011

Мне проще всего добавить строку "HTML" в элемент оболочки перед тестированием с JQuery:

$('<div>').html(temporaryString).find('a[name]').remove();
0 голосов
/ 17 июня 2011

Я думаю, что вы должны делать это вместо этого, если все, что вы хотите, это просто якоря .

$ (temporaryString) .find ( "а") удалить ();.

но дело в том, что находится во временной строке? если это просто текст, то я думаю, что самый простой способ - использовать скрытый div, вставить туда html и вызвать div для обработки с использованием jquery.

1011 * т.е. *

$("#hiddenDivId").html(myHtmlChunk);
$("#hiddenDivId").find("a").remove();

//then do whatever u want with the html and clear the hidden div
$("#hiddenDivId").html("");
0 голосов
/ 17 июня 2011

ЕСЛИ я правильно понимаю:

if ($(temporaryString).html() == null) {
    // Is not HTML...
}
else {
    $('a', temporaryString).remove(); //remove all anchor tags
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...