Hướng dẫn jquery parsehtml get element - jquery parsehtml lấy phần tử

Tôi đang viết các bài kiểm tra với QUNIT và sử dụng $.ajax() để thực hiện HTML cho một số bài kiểm tra từ trang web Dev chạy trên địa phương của tôi:

add_elements = function(location, selector) { 
  $.ajax(location, {async: false}).done(function(data) {
    stor.$els = $(selector, $.parseHTML(data));
    stor.$els.appendTo($('body'));
  })
}

Sử dụng chức năng này tại một vị trí nhất định, tôi nhận được data sau đây được chuyển cho cuộc gọi lại .done() của tôi:





    Home
    
    




Mọi thứ hoạt động nếu selector#hero-units hoặc .hero-unit, nhưng $(selector, $.parseHTML(data)) không trả lại gì nếu selector





    Home
    
    




1! Và tôi muốn một đối tượng




    Home
    
    




2 cho phần tử




    Home
    
    




3.

Và đây là những gì giết chết tôi:

Những gì đang xảy ra ở đây? Có vẻ như những gì đang xảy ra là

<title>jQuery.parseHTML demotitle>

<script src="https://code.jquery.com/jquery-3.5.0.js">script>

str = "hello, my name is jQuery.",

html = $.parseHTML( str ),

// Append the parsed HTML

// Gather the parsed HTML's node names

$.each( html, function( i, el ) {

nodeNames[ i ] = "

  • " + el.nodeName + "
  • ";

    $log.append( "

    Node Names:

    " );

    .append( nodeNames.join( "" ) )

    2 không nhìn vào bất kỳ yếu tố cấp cao nào được trả lại bởi
    
    
    
    
        Home
        
        
    
    
    
    
    
    4 hoặc

    <title>jQuery.parseHTML demotitle>

    <script src="https://code.jquery.com/jquery-3.5.0.js">script>

    str = "hello, my name is jQuery.",

    html = $.parseHTML( str ),

    // Append the parsed HTML

    // Gather the parsed HTML's node names

    $.each( html, function( i, el ) {

    nodeNames[ i ] = "

  • " + el.nodeName + "
  • ";

    $log.append( "

    Node Names:

    " );

    .append( nodeNames.join( "" ) )

    4, và chỉ là con cái của họ.

    Làm thế nào tôi có thể nhận được một đối tượng

    
    
    
    
        Home
        
        
    
    
    
    
    
    2 cho
    
    
    
    
        Home
        
        
    
    
    
    
    
    3 từ
    
    
    
    
        Home
        
        
    
    
    
    
    
    4 này?

    CÂU TRẢ LỜI

    Tra cứu kiểu ____ 9 sử dụng

    <title>jQuery.parseHTML demotitle>

    <script src="https://code.jquery.com/jquery-3.5.0.js">script>

    str = "hello, my name is jQuery.",

    html = $.parseHTML( str ),

    // Append the parsed HTML

    // Gather the parsed HTML's node names

    $.each( html, function( i, el ) {

    nodeNames[ i ] = "

  • " + el.nodeName + "
  • ";

    $log.append( "

    Node Names:

    " );

    .append( nodeNames.join( "" ) )

    9. Vì tôi đang tìm kiếm một yếu tố cấp cao nhất trong đối tượng jQuery này, tôi nên sử dụng $.ajax()0 thay thế. Voila.

    jQuery.parsehtml (data [, bối cảnh] [, keepscripts]) return: mảngReturns: Array

    Mô tả: Phân tích một chuỗi vào một mảng các nút dom.Parses a string into an array of DOM nodes.

    • Phiên bản được thêm vào: 1.8JQuery.parsehtml (data [, bối cảnh] [, Keepscripts])jQuery.parseHTML( data [, context ] [, keepScripts ] )

      • dữ liệu

        Chuỗi HTML được phân tích cú pháp

      • Bối cảnh (mặc định: $.ajax()1) (default: $.ajax()1)

        Phần tử tài liệu để phục vụ như là bối cảnh trong đó đoạn HTML sẽ được tạo

      • Keepscripts (mặc định: $.ajax()2) (default: $.ajax()2)

        Một boolean cho biết có bao gồm các tập lệnh được truyền trong chuỗi HTML

    $.ajax()3 sử dụng các phương thức gốc để chuyển đổi chuỗi thành một tập hợp các nút DOM, sau đó có thể được chèn vào tài liệu. Các phương pháp này làm cho tất cả các văn bản theo dõi hoặc hàng đầu (ngay cả khi đó chỉ là khoảng trắng). Để ngăn chặn khoảng trắng kéo dài/hàng đầu không được chuyển đổi thành các nút văn bản, bạn có thể chuyển chuỗi HTML qua $.ajax()4.

    Theo mặc định, $.ajax()5 là $.ajax()1 hiện tại nếu không được chỉ định hoặc được đưa ra là $.ajax()7 hoặc $.ajax()8. Nếu HTML được sử dụng trong một tài liệu khác như iframe, tài liệu của khung đó có thể được sử dụng.

    Theo 3.0, hành vi mặc định được thay đổi. Nếu $.ajax()5 không được chỉ định hoặc được đưa ra là $.ajax()7 hoặc $.ajax()8, một $.ajax()1 mới được sử dụng. Điều này có khả năng cải thiện bảo mật vì các sự kiện nội tuyến sẽ không thực hiện khi HTML được phân tích cú pháp. Khi HTML được phân tích cú pháp được đưa vào một tài liệu, nó sẽ thực thi, nhưng điều này mang lại cho các công cụ cơ hội để vượt qua DOM đã tạo và loại bỏ bất cứ thứ gì được coi là không an toàn. Sự cải thiện này không áp dụng cho việc sử dụng nội bộ của $.ajax()3 vì chúng thường vượt qua trong $.ajax()1 hiện tại. Do đó, một tuyên bố như data5 vẫn phải chịu sự tiêm của mã độc.

    Cân nhắc về Bảo mật

    Hầu hết các API jQuery chấp nhận chuỗi HTML sẽ chạy các tập lệnh được bao gồm trong HTML.$.ajax()3 không chạy các tập lệnh trong HTML được phân tích cú pháp trừ khi data7 rõ ràng là data8.Tuy nhiên, trong hầu hết các môi trường vẫn có thể thực hiện các tập lệnh một cách gián tiếp, ví dụ thông qua thuộc tính data9.Người gọi nên nhận thức được điều này và bảo vệ chống lại nó bằng cách làm sạch hoặc thoát khỏi bất kỳ đầu vào không đáng tin cậy nào từ các nguồn như URL hoặc cookie.Đối với khả năng tương thích trong tương lai, người gọi không nên phụ thuộc vào khả năng chạy bất kỳ nội dung tập lệnh nào khi data7 không xác định hoặc $.ajax()2.

    Example:

    Tạo một mảng các nút DOM bằng chuỗi HTML và chèn nó vào DIV.

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    <title>jQuery.parseHTML demotitle>

    <script src="https://code.jquery.com/jquery-3.5.0.js">script>

    str = "hello, my name is jQuery.",

    html = $.parseHTML( str ),

    // Append the parsed HTML

    // Gather the parsed HTML's node names

    $.each( html, function( i, el ) {

    nodeNames[ i ] = "

  • " + el.nodeName + "
  • ";

    $log.append( "

    Node Names:

    " );

    .append( nodeNames.join( "" ) )

    Demo: