jQuery удалить () проблема с IE - PullRequest
       3

jQuery удалить () проблема с IE

1 голос
/ 26 октября 2010

У меня проблема с методом jQuery remove () в IE.Он удаляет элемент, но не полностью: он оставляет последние 2 закрывающих тега.

Я использую веб-формы ASP.Net.На странице мы используем сторонний виджет, который включает Javascript.Часть стороннего виджета - это окно поиска и кнопка внутри формы.(Все, что находится в контейнере div class = "getquote" ниже, происходит от стороннего виджета).

Вот страница:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TestFooBar.aspx.cs" Inherits="MyProject.TestFooBar" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <div id="top">Some Stuff</div>
            <div class="getquote">
            <div class="box">
                <form style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px;
                padding-top: 0px" action="http://foo.com/?q=bar"
                method="post" target="_self">
                <input class="ticker" onclick="this.select()" value="Enter foo" maxlength="15"
                    type="text" name="fooInput" jquery123456789="42" />
                <input class="go" value="Get Foo" type="submit" name="Go" />
                </form>
            </div>
        </div>
        <div id="bottom">Some More Stuff</div>

        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js"></script>
        <script type="text/javascript">
            $(function() {
                alert($("div").length)

                $('div.getquote').remove(); 

                alert($("div").length)
            });
        </script>
    </div>
    </form>
</body>
</html>

Разработчики ASP.Net сразу распознают огромную проблему: вы не можете иметь форму внутри веб-формы ASP.Net, потому что веб-формы используют одинвнешний элемент формы, обернутый вокруг всей страницы.

Так что мое решение - использовать jQuery для удаления формы и ее функциональности следующим образом:

    $(function() { $('div.getquote').remove(); });

К сожалению, remove () не работает правильно в IE.Он оставляет следующую разметку:

</form></DIV>

Кто-нибудь может объяснить, почему это происходит и какое возможное решение может быть?

ОБНОВЛЕНИЕ АНАЛИЗА Я до сих пор не знаюиметь окончательное решение, но считаю, что проблема может быть неправильно сформированный HTML.когда вы просматриваете исходный код через панель инструментов разработчика IE, вот результат.

<FORM id=form1 method=post name=form1 action=TestFooBar.aspx>
<DIV><INPUT id=__VIEWSTATE value=/wEPDwULLTE2MTY2ODcyMjlkZJK6qpmH4eDoZyoX9RueM4keR6Hd type=hidden name=__VIEWSTATE> </DIV>
<DIV>
<DIV id=top>Some Stuff</DIV></FORM>
<DIV id=bottom>Some More Stuff</DIV>
<SCRIPT src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js"></SCRIPT>

<SCRIPT type=text/javascript>
            $(function() {
                alert($("div").length)

                $('div.getquote').remove(); 

                alert($("div").length)
            });
        </SCRIPT>
</DIV></FORM>

Итак, хотя jQuery успешно удалил большую часть <div>, он оставил позади закрывающий артефакт </form>.

Ответы [ 2 ]

0 голосов
/ 28 октября 2010

Я пришел к выводу, что то, что я пытаюсь сделать, невозможно на уровне браузера. Проблема с вложением элемента <form></form>. IE будет игнорировать <form>, но когда он доберется до </form>, он закроет внешнюю форму, которая генерирует синтаксический анализ.

У меня есть несколько вариантов:

1) Никогда, никогда не используйте веб-формы ASP.Net снова. Вместо этого перейдите с ASP.NET MVC. Хорошо, это моя мечта, но нереально для старых приложений.

2) При использовании веб-форм предпочтение отдается XML-каналам над JS. В общем, в любом случае, возможно, это и лучше, но сторонним менеджерам нравится, когда третьи лица говорят, что их виджет можно поместить на страницу за 5 минут с помощью только одной строки кода.

3) Не вызывайте стороннее JS-подключение в браузере, а вместо этого вызывайте его из пользовательского метода сервера. Затем используйте Regex, чтобы удалить разметку и передать то, что вам нужно, в браузер. Гадкий хак, который следует делать, только если 2) недоступен.

0 голосов
/ 28 октября 2010

Насколько я могу видеть с данным HTML, метод remove () работает нормально ... Он удаляет div с классом getquote и всеми его дочерними элементами.

Форма и элементы, оставленные на странице, находятся за пределами указанного элемента, поэтому она не будет удалена данной командой $('div.getquote').remove();.

Я думаю, что вам, возможно, придется переосмыслить содержание вашего HTML, поскольку внутри другого элемента form есть элемент form, я думаю, что это не правильно отформатированный html.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...