过滤器按预期运行,它返回带有post类的多个div。但是,它只返回div中的内容
<h1></h1>
而不是
<div class="post"><h1></h1></div>
是否可以获得这种输出?
即。这种输出
<div class="post"><h1></h1></div>
以下是代码:
$(result).filter('.post').each(function(i, currentElement) {
var htmlOfSinglePost = $(this).html();
var p = $(htmlOfSinglePost).attr("data-post-id");
console.log(p);
});
答案 0 :(得分:0)
假设您的result
包含HTML,给定一些基本示例HTML,在.each()
this
中引用当前HTML元素(不是jQuery)对象。要获取外部HTML元素,可以使用outerHTML,如下所示。
要从外部内容中获取data-post-id
值,请将其包装到jQuery包装器中以使用$(outerContent).data('postId')
。
添加,你不能在结果上使用
getAttribute()
的原因 来自outerHTML
是因为outerHTML
重新出现了 DOMString 虽然你可以把DOMString
转换成一个元素 此时只使用jQuery$(...outerHTML).data()
更快,但仅仅是因为您已经在使用它
$('.post').each(function(i, currentElement) {
var outerContent = this.outerHTML;
console.log(outerContent);
var p = $(outerContent).data('postId');
console.log('postId = ',p);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="post" data-post-id="15">
<h1>Post</h1>
</div>
<div class="post" data-post-id="57">
<h1>Post 2</h1>
</div>
答案 1 :(得分:0)
$(this).html();
会为您提供指定选择器的内部HTML,不包括选择器本身。
你想要内部html和选择元素本身,你可能想要使用
$(selector)[0].outerHTML
这里是片段
$(".post").each(function(){
console.log($(this)[0].outerHTML)
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div class="post"><h1></h1></div>
<div class="post"><h1>This is other one</h1></div>
&#13;