1

我目前正在使用 markdown 重写我的错误/常见问题解答消息(而不是以前使用的存储在数据库中的 HTML 内容)。现在,我临时设置了一个页面errors.php,其中的文本区域显示了我必须编辑的内容,并带有两个用于错误代码和数字的小输入框。

目前,当我单击 fetch 按钮(见图 1)时,它会按原样获取 HTML 并将其放入 textarea 中(见图 2)。

相反,我想要类似于$.load(<link> + " #content")AJAX 的东西。这可能吗?

jQuery

$('#Fetch').on( 'click', function( e ) {
    e.preventDefault();
    var MyUrl = 'http://******/faq.php?code=' + $('input[name=code]').val() + "&num=" + $('input[name=number]').val();
    $.ajax( {
        url: MyUrl,
        type: "get",
        dataType: 'html',
        success: function( data ) {
            $('#MyArea').val(data);
        }
    });
});

以上工作完美,只有一个缺陷。它将整个页面的 HTML 内容转储到文本区域内。我只想拥有(假设)页面#content上的数据faq.php。通过对 HTML使用臭名昭著的


图 1 图 1


图 2 图 2

4

2 回答 2

2

好的,所以我有一个想法,它不是最干净的,但我想它会起作用。

所以这是你的代码:

$('#Fetch').on( 'click', function( e ) {
    e.preventDefault();
    var MyUrl = 'http://******/faq.php?code=' + $('input[name=code]').val() + "&num=" + $('input[name=number]').val();
    $.ajax( {
        url: MyUrl,
        type: "get",
        dataType: 'html',
        success: function( data ) {
            $('#MyArea').val(data);
        }
    });
});

我们可以将成功更改为以下内容:创建一个<div></div>具有样式的容器display:none,然后填充此 div,然后从中获取#content。所以它看起来像这样:

$('#Fetch').on( 'click', function( e ) {
    e.preventDefault();
    var MyUrl = 'http://******/faq.php?code=' + $('input[name=code]').val() + "&num=" + $('input[name=number]').val();
    $.ajax( {
        url: MyUrl,
        type: "get",
        dataType: 'html',
        success:  function (data) {
               $("body").append("<div id='contentContainer'></div>").css("display","none");
               $("#contentContainer").html(data);
               var content = $("#contentContainer #content").html();
               $("#MyArea").val(content);
                   }
    });

之后你可以删除 div 但你明白了。

编辑:

好的,这是一个更好的主意:您需要将该信息实际解析为 jQuery 变量,然后从那里您可以像从 DOM 一样解析 html。

$('#Fetch').on( 'click', function( e ) {
    e.preventDefault();
    var MyUrl = 'http://******/faq.php?code=' + $('input[name=code]').val() + "&num=" + $('input[name=number]').val();
    $.ajax( {
        url: MyUrl,
        type: "get",
        dataType: 'html',
        success:  function (data) {
               var container = $(data);
               var content = $(container).find("#content").html();
               $("#MyArea").val(content);
                   }
    });

我认为这不会得到任何清洁。由于我们只与 DOM 交互一次,因此它的工作速度也很快。

于 2013-03-31T16:39:51.233 回答
0

您可以使用 $( any html ) 从中创建一个 dom,然后在其中搜索“内容”容器。

例如,我们可以将您的功能更改为:-

$('#Fetch').on( 'click', function( e ) {
e.preventDefault();
var MyUrl = 'http://******/faq.php?code=' + $('input[name=code]').val() + "&num=" + $('input[name=number]').val();
$.ajax( {
    url: MyUrl,
    type: "get",
    dataType: 'html',
    success:  function (data) {
     var content = $("#content",$(data)).html();
     $("#MyArea").val(content);
        }
});
于 2013-04-03T16:59:47.113 回答