jQuery: содержит () селектор не работает IE - PullRequest
1 голос
/ 18 июня 2011

Я использую селектор jQuery: contains () для отображения только тех элементов из моего XML-файла, которые содержат определенную текстовую строку. Он отлично работает в FF, Safari, Chrome и т. Д., Но не в IE7, 8 или 9. Есть идеи?

jQuery(RSSqa).find("item:contains('Q & A with'):lt(1)").each(function(){

Этот бит кода отображает последний элемент в XML с надписью "Q & A with" в нем.

Вот некоторые из каналов RSS

<rss version="2.0">
<channel>
<title>Headlines</title>
<link>Coyotes</link>
<description>Coyotes</description>
<lastBuildDate>Fri, 17 Jun 2011 16:54:44 EDT</lastBuildDate>
<item>
<title>Q &amp; A with Brandon</title>
<enclosure length="63471" type="image/png" url="http://google.com/images/upload/325.jpg"></enclosure><link>http://google.com/news.htm?id=56362</link>
<description>description</description>
<author>Dave</author>
<pubDate>Tue, 24 May 2011 09:58:00 EDT</pubDate>
<guid>http://google.com/news.htm?id=56362</guid>
<comments>Brandon is a winner</comments>
</item>
<item>
<title>Q &amp; A with Jason</title>
<enclosure length="63471" type="image/png" url="http://google.com/images/upload/323.jpg"></enclosure><link>http://google.com/news.htm?id=56363</link>
<description>description</description>
<author>Dave</author>
<pubDate>Tue, 24 May 2011 09:58:00 EDT</pubDate>
<guid>http://google.com/news.htm?id=56363</guid>
<comments>Brandon is a winner</comments>
</item>
</channel>
</rss>

А вот и весь сценарий. Надеюсь, это поможет.

    jQuery(document).ready(function()
                  {

    jQuery.get('news.xml', function(RSSqa){ // NEWS XML

    jQuery('#nrmr2.colModRight .DCnarModBody').append('<div class="DCnarModR" />');

    jQuery(RSSqa).find("item:contains('Q & A with'):lt(1)").each(function(){ 

                        var headline = jQuery(this);
                    var $enclosure = headline.find('enclosure');
                    var image = $enclosure.attr("url");
                        var headlinesTitle = headline.find('title').text();
                    var link = headline.find('guid').text();
                        var description = headline.find('description').text();
                        var teaser = headline.find('comments').text();
                        var author = headline.find("author").text();
                    var pubDate = headline.find("pubDate").text();

var qaData = '<img src="' + image +'" height="172px" width="306px" >';                      
    qaData += '<a href="' + link + '" > <h1> ' + headlinesTitle + '</h1></a>';
    qaData += '' + teaser + ' <br clear="all" />';
    qaData += '<a href="' + link + '" class="mainButton" ><span>FULL STORY &rsaquo;</span></a>';
    jQuery('div.DCnarModR').append(jQuery(qaData));
    });
    });         
    });

1 Ответ

2 голосов
/ 03 июля 2011

Я тоже это видел. По какой-то причине кажется, что jQuery будет выполнять свои стандартные функции обхода только для реального объекта XML в Internet Explorer.

Обходной путь, который я использовал, заключался в том, чтобы сначала использовать простое обнаружение функций, чтобы увидеть, находитесь ли вы в IE, а затем преобразовать вашу строку XML в объект XML для использования jQuery.

Что-то вроде:

function Convert(xmlStr) {
    if (window.ActiveXObject && (new window.ActiveXObject("Microsoft.XMLDOM") != null)) {
        var xd = new window.ActiveXObject("Microsoft.XMLDOM");
        if (xd) {
            xd.loadXML(xmlStr);
            return xd;
        }
    }
    return xmlStr;
}

Затем в вашем коде (я пробовал это с вашим примером RSS, и, похоже, он добился цели в IE8).

jQuery.get('news.xml', function(RSSqa) { // NEWS XML
    RSSqa = Convert(RSSqa);
    jQuery(RSSqa).find("item:contains('Q & A with'):lt(1)").each(function() { 
        /* rest of your code... */
    });
});

Надеюсь, это поможет!

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