큰 HTML 문자열에서 jQuery 객체 만들기


140

여러 자식 노드를 포함하는 큰 HTML 문자열이 있습니다.

이 문자열을 사용하여 jQuery DOM 객체 를 생성 할 수 있습니까?

시도 $(string)했지만 모든 개별 노드가 포함 된 배열 만 반환합니다.

.find () 함수를 사용할 수있는 요소를 얻으려고합니다.


HTML은 어디에 있습니까? HTML로 무엇을 구성 하시겠습니까? .find () 함수를보고 싶을 것입니다 : api.jquery.com/find
Control Freak

3
jQuery 객체 모든 노드를 포함하는 배열과 유사한 객체입니다. 달성하려는 목표를 정교하게 설명 할 수 있습니까?
프레데릭 하 미디

'이 문자열'은 어디에 있습니까? 어떤 문자열?
Viezevingertjes 2016 년

여기를보십시오, 그것이 당신이 원하는 것 같아요 stackoverflow.com/q/759887/474535
bart s

문자열을 통해 한 WebView에서 다른 WebView로 요소를 전달해야합니다. 문자열은 해당 요소의 HTML 소스 일뿐입니다. jQuery 객체가 무엇인지 알지 못했을 것입니다.
user1033619 2018 년

답변:


200

최신 정보:

jQuery 1.8부터 $ .parseHTML을 사용 하면 HTML 문자열을 DOM 노드 배열로 구문 분석합니다. 예 :

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

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

데모


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

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

데모

이 코드에서 일어나는 일 :

  • $('<div/>')<div>DOM에 존재하지 않는 가짜
  • $('<div/>').html(string)string그 가짜 안에 <div>어린이로 추가
  • .contents()해당 가짜의 자식을 <div>jQuery 객체로 검색 합니다.

당신이 확인하려면 .find()작업을 다음이 시도 :

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

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

데모


1
@ user1033619 당신은 .find()또한 작업을 수행 할 수 있습니다, 데모를 확인하십시오
thecodeparadox

그러나 만약 그렇다면string = '<input type="text" value="val" />'
fdrv

1
할 수 있다면 $("<div/>")왜 할 수 $(string)없습니까?
xr280xr

2
더 복잡한 HTML을 사용하면 .contents를 제거 하여이 작업을 수행해야했습니다. jsfiddle.net/h45y2L7v
Simon Hutchison

내용을 얻으려면 줄 바꿈 div가 필요하기 때문에 $ (string)을 원하지 않습니다. div의 내용이 표시되며 입력 내용이됩니다.
Michael Khalili

120

jQuery 1.8부터 parseHtml을 사용하여 jQuery 객체를 만들 수 있습니다.

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

이것을 보여주는 JSFidle을 만들었습니다 : http://jsfiddle.net/MCSyr/2/

임의의 HTML 문자열을 jQuery 객체로 구문 분석하고 find를 사용하여 결과를 div에 표시합니다.


10
유령 div 요소를 사용할 필요가 없기 때문에이 답변이 훨씬 더 좋습니다. $ .parseHtml ftw.
ZeeCoder

2
이 대답은 내가 원할 때 $ jQueryObject.find () 할 때 효과가 없었습니다. 그 시점에서 DOM에 추가되지 않았기 때문에 추측합니다.
dougajmcdonald

@dougajmcdonald-컨텐츠를 dom에 추가하지 않고 작동해야합니다. 내 바이올린 ( jsfiddle.net/MCSyr/2 )을 살펴보면 jQuery 객체에서 find를 호출하고 예상대로 결과를 반환합니다. $ jQueryObject.find ( "# theAnswer"). html ()
kiprainey

1
흥미로운 @kiprainey, 나는 그것이 나를 위해하지 않은 예를 발굴하고 다른 무언가가 있는지 살펴볼 것입니다. 다른 로직의로드 내부에서 TypeScript 모듈로 작성되었으며 다른 문제 일 수 있습니다! 사과드립니다.
dougajmcdonald 2018

8
parseHTML이 jQuery 1.8
Jean-Michel Garcia

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

그러면 문자열을 HTML로 넣을 수있는 더미 jQuery 객체가 생성됩니다. 그런 다음 아이들 만 얻습니다.


2
ive이 시도했지만 나중에 사용해야하는 .find () 함수로는 작동하지 않습니다.
user1033619 2016 년

3
@ user1033619 .filter()대신 을 사용해야 합니다 .find().
Kulbir Saini 2012

2

이를 위해 특별히 설계된 cheerio 라는 훌륭한 라이브러리도 있습니다 .

서버를 위해 특별히 설계된 핵심 jQuery를 빠르고 유연하며 간결하게 구현합니다.

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 템플릿에 다음을 사용합니다.

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

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

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

참고 : jQuery를 사용하고 있다고 가정


1

$ (string)이 작동하지 않는 이유는 jquery가 $ () 사이에서 HTML 내용을 찾지 못하기 때문입니다. 따라서 먼저 html로 구문 분석해야합니다. HTML을 파싱 한 변수가 있으면 그런 다음 $ (string)을 사용하고 객체에서 사용 가능한 모든 기능을 사용할 수 있습니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.