jquery从ajax输出中查找div的ID

问题描述:

恐怕很类似的问题已经被问到here,但由于某种原因它只输出“null”。jquery从ajax输出中查找div的ID

我想从ID输出的ajax输出中找到div html。以下是我的脚本。

// LOAD NAVIGATION 
$.ajax({ 
    type: 'POST', 
    url: 'includes/content/bookingsystem/b_navigation.php', 
    data: thisButtonType + '=true&loadNav=date', 
    success: function(output) { 

    alert(output); // Outputs correctly two divs #navDay, and #navMonth 

    alert($(output).find('#navDay').html()); // Results into "null" 

    $('#navDay').html($(output).find('#navDay').html()); // Results in an empty div, since it overwrote the html with 'null' - nothing. 

    //$('#navDay').replaceWith($('#navDay', output)); // Same here - nada. 
    //$('#navMonth').html($(output).find('#navMonth').html()); 

    } 

}); 

第一个警报(输出)的结果是:

<div id="navDay">Im day nav!</div> 
<div id="navMonth">Im month nav!</div> 

,如果你希望能够使用.find()$(selector, context)你需要用你的两个div在外层div - 这些功能只能找到后代节点,并且在没有真正的父项的情况下,您的HTML中有两个兄弟节点。

你可以做包装服务器端,或使用.wrap()

此外,.html()函数只返回标签的内容,而不是标签本身。

假设(根据您所使用的.replaceWith),你的目的是要取代整个元素,而不仅仅是文字,我会去:

<div> 
    <div id="navDay">Im day nav!</div> 
    <div id="navMonth">Im month nav!</div> 
</div> 

在这一点这条线从以前的非工作代码也可以工作:

$('#navDay').replaceWith($('#navDay', output)); 
+0

最好的,谢谢你一大堆。没有意识到它必须像那样包裹。 – Dusty

+0

我无法像@Alnitak建议的那样在'output'上找到正确执行'.wrap()'的方法。我尝试'.wrap()'以便我可以做'.find()',但是我没有得到任何地方。创伤和不同的路线,只是使用'.filter()'建议在http://*.com/a/400232/923817 –

试试这个

// LOAD NAVIGATION 
$.ajax({ 
    type: 'POST', 
    url: 'includes/content/bookingsystem/b_navigation.php', 
    data: thisButtonType + '=true&loadNav=date', 
    success: function(output) { 

    //alert(output); // Outputs correctly two divs #navDay, and #navMonth 

    //alert($(output).find('#navDay').html()); // Results into "null" 

    $('#navDay').html($('#navDay', $(output).wrap("<div />")).html()); // Results in an empty div, since it overwrote the html with 'null' - nothing. 

    //$('#navDay').replaceWith($('#navDay', output)); // Same here - nada. 
    //$('#navMonth').html($(output).find('#navMonth').html()); 

    } 

});