2011-11-14 82 views
13

说我有jQuery的获得DOM元素作为字符串

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

如何获得

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

假设我就这么办的呢?

更新我不想打电话给.parent(),因为我在父元素中有很多其他的东西。

+1

刚一说明:你真的应该引用您的属性选择。 '$( “:输入[类型= '文本']:第一”)'。 –

+0

是的,这只是一个例子,那不是实际的选择器。我通常尝试避免使用属性选择器。 – bevacqua

+1

[Get selected element's external HTML](http://stackoverflow.com/questions/2419749/get-selected-elements-outer-html) – Blazemonger

回答

20

An old trick:

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

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

更新您不必担心通话.parent()因为你与一个孤立的克隆工作的原始选择器。

+1

克隆为什么重要?如果我正在创建一个项目,那会很重要吗? – casraf

+1

内部元素不是即时创建的;它是从DOM中选择的,所以我们克隆它以避免更改DOM。 – Blazemonger

+0

$(“a”)。html('')。prop(“outerHTML”))? –

4

通过附加到创建的元素来使用jQuery.html()

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

下面是一个小提琴提供一个例子:http://jsfiddle.net/Zwbmx/1/

+1

但您现在已将原始元素移出DOM。 – Blazemonger

+0

这将删除DOM的输入并将其附加到新创建的div。您需要首先克隆输入。 –

+0

@将您的右键火箭我修改了代码以首先克隆元素。 –

-1

如何:

var str = $(selector)[0] 

也许增加一个检查有一个元素返回。

0

以下是@Blazemonger回答的问题,如果您打算将此html内容发送到服务器,那么应​​该删除所有不必要的标记,空格和换行符,这些值不会增加任何值。

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有50kb,摆脱这个东西后,它减少到4kb!

25

如何

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

这应该是正确的答案 –