tom*_*mis 5 javascript ajax jquery dom
我正在使用 jQuery 的 AJAX 从服务器获取新内容。数据以 JSON 格式加载:
\n\n$.ajax({\n url: url,\n data: {\n \'ajax\': \'1\',\n },\n dataType: \'json\',\n success: somefunction\n});\nRun Code Online (Sandbox Code Playgroud)\n\n由于服务器端应用程序限制,我无法在内部设置更多 JSON 变量,因此我必须将所有内容加载到内容中。这就是为什么我必须将结果加载到 jQuery 中,而不是搜索并替换页面上的某些元素,如下所示(在 中使用somefunction):
var somefunction = function(data) {\n var con = $(\'<div></div>\').html(data.content); // just $(data.content) is not working\n $(\'div#mainContent\').html(con.find(\'div#ajax-content\').html());\n ... // same process with three more divs\n}\nRun Code Online (Sandbox Code Playgroud)\n\n编辑:请注意,我必须执行相同的过程来替换三个 div!
\n\n关于这一点还有更多内容,但作为示例,我希望这已经足够了。我的问题:对于某种逻辑方式,我希望将结果加载到 DOM ( $(data.content)),解析为 html ( con.find(\'dix#ajax-content\').html()) 然后返回 DOM ( $(\'div#mainContent\').html()) 在我看来就像丢失一些资源并降低性能,所以我想知道是否有任何更快的方法来做到这一点并直接加载 DOM,例如:
$(\'div#mainContent\').dom(con.find(\'div#ajax-content\').dom());\nRun Code Online (Sandbox Code Playgroud)\n\n我尝试用 google 搜索它,但也许我不知道该输入什么。另外 jQuery 文档对我帮助不大。
\n\n一些事实:
\n\n最后,我知道使用服务器端应用程序提供更多 JSON 变量会更好,但是,我需要编写不太容易的和平代码,这需要更长的时间来开发,而我不这样做\现在还没有。目前在客户端执行此操作只是临时解决方案,但是,我不想大幅降低性能。
\n\n附带问题:
\n\n在这种情况下使用函数是否正确find(),或者有更好的函数吗?
编辑2(无法解析字符串) \n我期待这个工作,但事实并非如此:
\n\ncontent = \'<div id="ajax-title">Pe\xc4\x8divo b\xc4\x9b\xc5\xben\xc3\xa9, sladk\xc3\xa9, slan\xc3\xa9</div>\n<div id="ajax-whereami"><a href="/category/4">Chl\xc3\xa9ba a pe\xc4\x8divo</a> \xc2\xbb Pe\xc4\x8divo b\xc4\x9b\xc5\xben\xc3\xa9, sladk\xc3\xa9, slan\xc3\xa9</div>\';\n$(content);\nRun Code Online (Sandbox Code Playgroud)\n
实际上,$(data.content)应该可以正常工作,但您必须记住,顶级元素只能通过.filter()而不是到达.find()。如果您希望定位的元素比您应该使用的根至少深一级.find();在下面的示例中,您可以在适当的地方替换.filter()为.find()。
var $con = $(data.content);
$('div#mainContent')
.empty()
.append($con.filter('div#ajax-content'))
.append($con.filter('div#another-id'))
.append($con.filter('div#and-another-id'));
Run Code Online (Sandbox Code Playgroud)
您还可以将选择器组合在一起:
.append($con.filter('div#ajax-content, div#another-id, div#and-another-id'));
Run Code Online (Sandbox Code Playgroud)
最后,由于标识符只能在文档中出现一次,因此您可以删除该div部分:
.append($con.filter('#ajax-content, #another-id, #and-another-id'));
Run Code Online (Sandbox Code Playgroud)
更新
data.content好的,当换行符出现在错误的位置时,jQuery 似乎无法正确评估;这应该适用于所有情况:
var wrapper = document.createElement('div');
wrapper.innerHTML = data.content;
var $con = $(wrapper);
Run Code Online (Sandbox Code Playgroud)