jQuery ajax 调用返回特定的 HTML 元素

发布于 2024-11-09 00:20:11 字数 617 浏览 0 评论 0原文

我尝试了这段代码:

$.post('/script', function(result) {
    var foo = $(result).find('#foo');
    $('#result').html(foo);
});

这是返回 html:

<div id='foo'>
  Content.
</div>
<div id='new'>
   New data
</div>

在警告变量 foo 后,它返回一个对象。然后html就变成空的了。我想打印一个特定的 html 块(仅#foo 而不是#new)。

来自 jQuery 文档:

$.post( url, { s: term } ,
      function( data ) {
          var content = $( data ).find( '#content' );
          $( "#result" ).html( content );
      }
);

这个(var content)也会导致对象并在 #result 上打印一个空字符串。

I tried this code:

$.post('/script', function(result) {
    var foo = $(result).find('#foo');
    $('#result').html(foo);
});

Here's the return html:

<div id='foo'>
  Content.
</div>
<div id='new'>
   New data
</div>

After alerting variable foo it returns an object. And the html becomes empty. I would like to print a specific html block (#foo only not #new).

From jQuery documentation:

$.post( url, { s: term } ,
      function( data ) {
          var content = $( data ).find( '#content' );
          $( "#result" ).html( content );
      }
);

This (var content) would also result to object and printing an empty string on #result.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

兔姬 2024-11-16 00:20:11

发生这种情况是因为 #foo#new 都位于顶层。

.find() 方法查找后代。因此您需要将它们包装在服务器端(结果)或 jQuery 级别的另一个 div 中。

将 html 更改为

<div>
   <div id='foo'>
     Content.
   </div>
   <div id='new'>
      New data
   </div>
</div>

因此,要么在 jquery 级别

$.post('/script', function(result) {
    var foo = $(result).wrapAll('<div>').parent().find('#foo');
    $('#result').html(foo);
});

如果您使用 HTML 解决方案,则可以使用可以加载页面片段的 .load 方法

$('#result').load('/script #foo');

这将加载 id < 的元素code>foo 从 /script 页面并将其放入 #result 元素中。

This happens because both #foo and #new are at the top level.

The .find() method looks for descendants. so you will need to wrap them in another div either at the server-side (result) or the jQuery level.

So either change html to

<div>
   <div id='foo'>
     Content.
   </div>
   <div id='new'>
      New data
   </div>
</div>

or at jquery level

$.post('/script', function(result) {
    var foo = $(result).wrapAll('<div>').parent().find('#foo');
    $('#result').html(foo);
});

If you use the HTML solutions you could however use the .load method which can load page fragments

$('#result').load('/script #foo');

This will load the element with id foo from the /script page and put it in #result element.

素年丶 2024-11-16 00:20:11

foo 是一个对象... foo.html() 是你想要的,所以你必须改变:
$('#result').html(foo);

$('#result').html(foo.html());

foo is an object... foo.html() is what you want, so you've to change :
$('#result').html(foo);
in
$('#result').html(foo.html());

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文