2011-11-14 34 views
13

Nói rằng tôi cójQuery được DOM yếu tố như chuỗi

$(":input[type=text]:first") 

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

<input type="text" value="" size="28" maxlength="140" tabindex="1" placeholder="search" class="textbox" name="q" autocomplete="off"> 

Giả sử tôi chạy trên SO?

Cập nhật Tôi không muốn gọi .parent() vì tôi có nhiều nội dung khác trong phần tử gốc.

+1

Chỉ cần một lưu ý: bạn thực sự cần trích chọn thuộc tính của bạn. '$ (": đầu vào [loại = 'văn bản']: đầu tiên ")'. –

+0

Vâng, đó chỉ là một ví dụ, đó không phải là bộ chọn thực tế. Tôi thường cố gắng và tránh sử dụng selectors thuộc tính anyways. – bevacqua

+1

có thể trùng lặp của [Nhận HTML bên ngoài của phần tử đã chọn] (http://stackoverflow.com/questions/2419749/get-selected-elements-outer-html) – Blazemonger

Trả lời

20

An old trick:

var selector = ":input[type=text]:first"; 

var str = $(selector).clone().wrap('<div/>').parent().html(); 

Cập nhật Bạn không cần phải lo lắng về việc kêu gọi .parent() kể từ khi bạn đang làm việc với một bản sao mồ côi của bộ chọn gốc.

+1

Tại sao bản sao lại quan trọng? Nếu tôi đang tạo một vật phẩm trên bay, liệu nó có quan trọng không? – casraf

+1

Phần tử bên trong không được tạo ra khi đang bay; nó được chọn từ DOM, vì vậy chúng tôi sao chép nó để tránh thay đổi DOM. – Blazemonger

+0

Điều gì về $ ("a"). Html (''). Prop ("outerHTML"))? –

4

Sử dụng jQuery.html() bằng cách thêm vào phần tử đã tạo.

$('<div/>').append($(":input[type=text]:first").clone()).html() 

Dưới đây là một fiddle cung cấp một ví dụ: http://jsfiddle.net/Zwbmx/1/

+1

Nhưng bây giờ bạn đã di chuyển phần tử gốc ra khỏi DOM. – Blazemonger

+0

Thao tác này sẽ xóa đầu vào khỏi DOM và nối nó vào div mới được tạo. Bạn cần sao chép đầu vào trước tiên. –

+0

@Rocket quyền của bạn tôi đã sửa đổi mã để sao chép phần tử đầu tiên. –

-1

Làm thế nào về:

var str = $(selector)[0] 

Có lẽ thêm một tấm séc rằng có một yếu tố trả lại.

0

Theo dõi những gì @Blazemonger đã trả lời, nếu bạn định gửi nội dung html này đến máy chủ, bạn nên loại bỏ tất cả các thẻ không cần thiết, khoảng trống và ngắt dòng không thêm bất kỳ giá trị nào.

var quote = $(".invoice") //get hidden print-version DOM element 
    .clone() 
    .wrap('<div/>') 
    .parent() 
    .html() 
    .replace(/ /g, '') //get rid of indentation spaces 
    .replace(/(\r\n|\n|\r)/gm, "") //get rid of line breaks 
    .replace(/<!--[\s\S]*?-->/g, ""); //get rid of comment tags 

html của tôi có 50kb, sau khi loại bỏ nội dung này, nó đã giảm xuống 4kb!

25

Làm thế nào về

$(selector).prop("outerHTML"); 
+1

Đây phải là câu trả lời đúng –

Các vấn đề liên quan