Tạo một đối tượng jQuery từ một chuỗi HTML lớn


140

Tôi có một chuỗi HTML lớn chứa nhiều nút con.

Là nó có thể để xây dựng một jQuery đối tượng DOM sử dụng chuỗi này?

Tôi đã thử $(string)nhưng nó chỉ trả về một mảng chứa tất cả các nút riêng lẻ.

Imtrying để có được một phần tử mà tôi có thể sử dụng hàm .find () trên.


HTML ở đâu, bạn muốn xây dựng cái gì với nó? Bạn có thể muốn xem hàm .find (): api.jquery.com/find
Control Freak

3
Một đối tượng jQuery một đối tượng giống như mảng chứa tất cả các nút. Bạn có thể giải thích những gì bạn đang cố gắng để đạt được?
Frédéric Hamidi

'Chuỗi này' ở đâu? chuỗi nào
Viezevingertjes

Hãy nhìn vào đây, tôi nghĩ đó là những gì bạn muốn stackoverflow.com/q/759887/474535
bart s

Tôi phải chuyển phần tử từ một WebView này sang một chuỗi khác thông qua một chuỗi, chuỗi sẽ chỉ là nguồn HTML của phần tử đó. Tôi nghĩ rằng tôi có thể đã hiểu sai đối tượng jQuery là gì.
dùng1033619

Câu trả lời:


200

Cập nhật:

Từ jQuery 1.8, chúng ta có thể sử dụng $ .parseHTML , sẽ phân tích chuỗi HTML thành một mảng các nút DOM. ví dụ:

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

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

BẢN GIỚI THIỆU


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

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

BẢN GIỚI THIỆU

Điều gì đang xảy ra trong mã này:

  • $('<div/>')là giả mạo <div>không tồn tại trong DOM
  • $('<div/>').html(string)nối stringvào đó là giả <div>khi còn nhỏ
  • .contents()lấy ra những đứa trẻ giả mạo đó <div>như một đối tượng jQuery

Nếu bạn muốn thực hiện .find()công việc thì hãy thử điều này:

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

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

BẢN GIỚI THIỆU


1
@ user1033619 bạn cũng có thể thực hiện .find()thao tác, kiểm tra bản demo
thecodeparadox

Nhưng làm thế nào nếustring = '<input type="text" value="val" />'
fdrv

1
Nếu bạn có thể làm $("<div/>"), tại sao bạn không thể làm $(string)?
xr280xr

2
Với HTML phức tạp hơn, tôi cần phải xóa .contents để làm việc này. jsfiddle.net/h45y2L7v
Simon Hutchison

Bạn không muốn làm $ (chuỗi) vì bạn cần một div gói để lấy nội dung của. Bạn sẽ nhận được nội dung của div, đó sẽ là đầu vào của bạn.
Michael Khalili

120

Kể từ jQuery 1.8, bạn chỉ có thể sử dụng parseHtml để tạo đối tượng jQuery của mình:

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));

Tôi đã tạo một JSFidle thể hiện điều này: http://jsfiddle.net/MCSyr/2/

Nó phân tích chuỗi HTML tùy ý thành một đối tượng jQuery và sử dụng find để hiển thị kết quả trong div.


10
Tôi thấy câu trả lời này tốt hơn nhiều, vì điều này không phải sử dụng yếu tố ma div. $ .parseHtml ftw.
ZeeCoder

2
Câu trả lời này không hiệu quả với tôi khi tôi muốn sau đó đến $ jQueryObject.find (), tôi cho rằng vì nó không được thêm vào dom vào thời điểm đó.
dougajmcdonald

@dougajmcdonald - find nên hoạt động mà không cần thêm nội dung vào dom. Nếu bạn xem fiddle của tôi ( jsfiddle.net/MCSyr/2 ), tôi đang gọi find trên đối tượng jQuery và nó trả về một kết quả như mong đợi: $ jQueryObject.find ("# theAnswer"). Html ()
kiprainey

1
@kiprainey thú vị, tôi sẽ tìm ra ví dụ mà nó không dành cho tôi và xem có gì khác đang diễn ra không. Nó được viết bên trong một mô-đun TypeScript bên trong một tải logic khác, cũng có thể là một vấn đề khác! Lời xin lỗi của tôi.
dougajmcdonald

8
Đáng nói là parseHTML đã được thêm vào jQuery 1.8
Jean-Michel Garcia

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

Điều này tạo ra một đối tượng jQuery giả, trong đó bạn có thể đặt chuỗi dưới dạng HTML. Sau đó, bạn có được những đứa trẻ mà thôi.


2
ive đã thử điều này, nhưng nó không hoạt động với hàm .find () mà tôi phải sử dụng sau này.
dùng1033619

3
@ user1033619 bạn phải sử dụng .filter()thay vì .find().
Kulbir Saini

2

Ngoài ra còn có một thư viện gọi lớn từ biệt thiết kế đặc biệt cho việc này.

Việc triển khai nhanh chóng, linh hoạt và tinh gọn của jQuery lõi được thiết kế dành riêng cho máy chủ.

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

Tôi sử dụng như sau cho các mẫu HTML của mình:

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

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

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

Lưu ý: Giả sử nếu bạn đang sử dụng jQuery


1

lý do tại sao $ (chuỗi) không hoạt động là vì jquery không tìm thấy nội dung html giữa $ (). Do đó, trước tiên bạn cần phân tích cú pháp thành html. một khi bạn có một biến trong đó bạn đã phân tích cú pháp html. sau đó bạn có thể sử dụng $ (chuỗi) và sử dụng tất cả các hàm có sẵn trên đối tượng

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.