Büyük bir HTML dizesinden jQuery nesnesi oluşturma


140

Birden çok alt düğüm içeren büyük bir HTML dizesi var.

Bu dizeyi kullanarak bir jQuery DOM nesnesi oluşturmak mümkün mü ?

Denedim $(string)ama sadece tüm bireysel düğümleri içeren bir dizi döndürür.

.Find () işlevini kullanabileceğim bir öğe almak için imtrying.


HTML nerede, onunla ne inşa etmek istiyorsunuz? .Find () işlevine bakmak isteyebilirsiniz: api.jquery.com/find
Control Freak

3
Bir jQuery nesnesi , tüm düğümleri içeren dizi benzeri bir nesnedir. Neyi başarmaya çalıştığınızı açıklayabilir misiniz?
Frédéric Hamidi

'Bu dize' nerede? hangi ip?
Viezevingertjes

Buraya bir bakın, bence istediğiniz şey stackoverflow.com/q/759887/474535
bart s

Bir dize ile bir WebView diğerine öğe geçmek zorunda, dize sadece bu öğenin HTML kaynağı olacaktır. Ben bir jQuery nesnenin ne olduğunu yanlış anlamış olabilir düşünüyorum.
user1033619

Yanıtlar:


200

Güncelleme:

JQuery 1.8'den, HTML dizesini bir DOM düğümü dizisine ayrıştıracak $ .parseHTML kullanabiliriz . Örneğin:

var dom_nodes = $($.parseHTML('<div><input type="text" value="val" /></div>'));

alert( dom_nodes.find('input').val() );

DEMO


var string = '<div><input type="text" value="val" /></div>';

$('<div/>').html(string).contents();

DEMO

Bu kodda neler oluyor:

  • $('<div/>')DOM'da <div>bulunmayan bir sahte
  • $('<div/>').html(string)çocuk olarak stringo sahte içine ekler<div>
  • .contents()o sahte çocuklarını <div>jQuery nesnesi olarak alır

İş yapmak istiyorsanız şunu .find()deneyin:

var string = '<div><input type="text" value="val" /></div>',
    object = $('<div/>').html(string).contents();

alert( object.find('input').val() );

DEMO


1
@ user1033619 .find()ayrıca operasyon, demo kontrol edebilirsiniz
thecodeparadox

Ama nasıl olursastring = '<input type="text" value="val" />'
fdrv

1
Yapabiliyorsan $("<div/>")neden yapamıyorsun $(string)?
xr280xr

2
Daha karmaşık HTML ile çalışmasını sağlamak için .contents kaldırmak gerekiyordu. jsfiddle.net/h45y2L7v
Simon Hutchison

$ (String) yapmak istemezsiniz, çünkü içeriğini almak için bir kaydırma divına ihtiyacınız vardır. Girdiğiniz div'in içeriğini alacaksınız.
Michael Khalili

120

JQuery 1.8'den itibaren, jQuery nesnenizi oluşturmak için parseHtml dosyasını kullanabilirsiniz:

var myString = "<div>Some stuff<div>Some more stuff<span id='theAnswer'>The stuff I am looking for</span></div></div>";
var $jQueryObject = $($.parseHTML(myString));

Bunu gösteren bir JSFidle oluşturdum: http://jsfiddle.net/MCSyr/2/

Rasgele HTML dizesini bir jQuery nesnesine ayrıştırır ve sonucu bir div içinde görüntülemek için find komutunu kullanır.


10
Bu cevabı çok daha iyi buluyorum, çünkü bunun bir hayalet div öğesi kullanması gerekmiyor. $ .parseHtml ftw.
ZeeCoder

2
Sonra o zaman $ jQueryObject.find () için istediğim zaman bu cevap benim için işe yaramadı, çünkü o noktada dom eklenmedi çünkü.
dougajmcdonald

@dougajmcdonald - bul, içerik dom'a eklenmeden çalışmalıdır. Benim keman ( jsfiddle.net/MCSyr/2 ) bir göz atın , jQuery nesnesi üzerinde find çağırıyorum ve beklendiği gibi bir sonuç döndürür: $ jQueryObject.find ("# theAnswer"). Html ()
kiprainey

1
@kiprainey ilginç, benim için olmayan örneği kazacağım ve başka bir şey olup olmadığını göreceğim. Bir TypeScript modülünün içine başka bir mantık yükü içinde yazılmış, farklı bir sorun olabilirdi! Özür dilerim.
dougajmcdonald

8
ParseHTML'nin jQuery 1.8'e
Jean-Michel Garcia

12
var jQueryObject = $('<div></div>').html( string ).children();

Bu, dizeyi HTML olarak koyabileceğiniz bir sahte jQuery nesnesi oluşturur. Sonra, sadece çocukları alırsınız.


2
ive bunu denedim, ancak daha sonra kullanmak zorunda .find () işlevi ile çalışmaz.
user1033619

3
@ user1033619 .filter()yerine kullanmanız gerekiyor .find().
Kulbir Saini

2

Bunun için özel olarak tasarlanmış cheerio adlı harika bir kütüphane de var .

Sunucu için özel olarak tasarlanmış çekirdek jQuery'nin hızlı, esnek ve yalın uygulaması.

var cheerio = require('cheerio'),
    $ = cheerio.load('<h2 class="title">Hello world</h2>');

$('h2.title').text('Hello there!');
$('h2').addClass('welcome');

$.html();
//=> <h2 class="title welcome">Hello there!</h2>

1

HTML şablonlarım için aşağıdakileri kullanıyorum:

$(".main").empty();

var _template = '<p id="myelement">Your HTML Code</p>';
var template = $.parseHTML(_template);
var final = $(template).find("#myelement");

$(".main").append(final.html());

Not: jQuery kullanıyorsanız,


1

$ (string) 'in çalışmamasının nedeni jquery'nin $ () arasında html içeriği bulamamasıdır. Bu nedenle önce html'ye ayrıştırmanız gerekir. html'yi ayrıştırdığınız bir değişkeniniz varsa. daha sonra $ (string) ve nesnede bulunan tüm fonksiyonları kullanabilirsiniz

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.