Korzystanie z jQuery tworzenie nowych elementów Dom z tekstu.

Przykład:

jQuery('<div><img src="/some_image.gif"></img></div>');

Po wykonaniu tego stwierdzenia powoduje, że przeglądarka zażąda żądania pliku "some_img.gif" z serwera.

Czy istnieje sposób wykonania tego stwierdzenia, aby uzyskać wynikowy obiekt jQuery może być stosowany z Dom Traversal, ale nie powoduje, że przeglądarka trafiła do serwera z żądaniami dla obrazów i innych treści odnoszących się?

Przykład:

var jquery_elememnts = jQuery('<div><img class="a_class" src="/some_image.gif"></img></div>');
var img_class = jquery_elememnts.find('img').attr('class');

Jedynym pomysłem, które mam teraz, jest użycie REGEX, aby usunąć wszystkie znaczniki "SRC" z elementów obrazu i innych rzeczy, które wywoływać żądania przeglądarki przed użyciem jQuery do oceny HTML.

W jaki sposób jQuery można wykorzystać do oceny HTML bez wywołania przeglądarki, aby uzyskać żądanie do serwera do zawartości odniesienia wewnątrz oceny HTML?

Dzięki!

3
Chris Dutrow 9 wrzesień 2012, 23:24

4 odpowiedzi

Najlepsza odpowiedź

Jeśli wykonasz sposób regexp, może taki prosty

    htmlString.replace(/[ ]src=/," data-src=");

Zrobi pracę?

Więc zamiast szukać:

    jquery_elememnts.find('img').attr('src');

Będziesz musiał szukać:

    jquery_elememnts.find('img').data('src');
5
blobmaster 9 wrzesień 2012, 21:35

To nie jest możliwe Afaik. Gdy przeglądarka ładuje fragment HTML, taki jak jeden zawierający img, który odnosi się do innego zasobu za pomocą {x1}}, spróbuje go pobrać.

Jeśli jednak musisz uzyskać atrybut class z img, możesz użyć $.parseXML(), aby uzyskać XMLDocument, a następnie proces, aby uzyskać wymagany atrybut. W ten sposób fragment HTML nigdy nie zostanie załadowany, a zatem obraz nie zostanie pobrany:

var jquery_elememnts = $.parseXML('<div><img class="a_class" src="http://4.bp.blogspot.com/-B6PMBqTyqpk/UC7syX2eRLI/AAAAAAAABL0/SEoLWoxgApo/s1600/google10.png"></img></div>');
var img = jquery_elememnts.getElementsByTagName("img")[0];
var img_class = img.getAttribute("class");

Demo .

2
João Silva 9 wrzesień 2012, 20:05

Możesz użyć parseXML w jQuery.

var elements = jQuery.parseXML('<div><img class="a_class" src="/some_image.gif"></img></div>');
var img_class = $(elements).find('img').attr('class');
alert(img_class);

Ciąg powinien być idealnym XML. Jest to obejście, które używane przez podobny cel, ale nie wiem, czy to rozwiąże problem.

1
Diode 9 wrzesień 2012, 20:00
var jquery_elememnts = (new DOMParser()).parseFromString('<div><img class="a_class" src="/some_image.gif"></img></div>', 'text/html'); 
var img_class = jQuery(jquery_elememnts).find('img').attr('class');
1
eongoo 31 sierpień 2015, 08:20