2015-08-27 172 views
0

我在opencart中创建了一个应用程序,其中控制器以json形式返回输出。如果我做$('.my-div').html(json['output'])那么它的工作正常。但是,我如何过滤该响应中的特定divtable,并只将过滤后的html放入我的div中。我知道$('.my-div').load('index.php?route=mymodule/subpage' .my-div > *);但它不起作用,因为我的控制器被创建为返回输出不生成。从ajax响应中加载html内容

什么我控制器返回是

$json['output'] = $this->load->view('default/template/mymodule/mytemplate.tpl', $data);

编辑

什么我得到响应是 json['output'] = '<div>......</div><table class="myclass"></table>';

我只想myclass在我的div加载。那么我怎样才能从响应中只筛选myclass table?我尝试过滤器,但它给我错误。

+0

你想从整个加载代码的HTML代码的一部分? –

+0

@syedmohamed是的!为了更好的理解,我编辑了我的问题。 –

回答

1

如果你只想要div的一部分html,那你为什么要渲染整个tpl文件。你为什么不删除你不想使用的html代码。

假设,如果你的mytemplate.tpl有

<div> 
--------- 
-------- 
</div> 

<table class="myclass"></table> 

<div> 
--------- 
-------- 
</div> 

那么你为什么不只是保持表的代码作为,而呈现TPL文件你不使用它删除所有其他代码。

+0

我也在其他文件中使用它。这就是为什么:( –

+0

在这种情况下,你必须在json中只传递必需的html .. 你可以使用file_get_contents来获取php控制器中tpl文件的所有内容,然后相应地改变html. Don “吨得到所有的HTML jQuery的,因为它是不容易处理它的jQuery。 – Wolfack

+0

我可以从JSON过滤呢? –

0

Raghubendra说,这是更好地只保留html需要在.tpl文件,但如果你不能这样做,不管什么原因,你可以尝试过滤它使用XPATH服务器端[这不是最快的方式,但它是获得结果的干净方式]。这里是我认为你可以做到这一点:

$output = $this->load->view('default/template/mymodule/mytemplate.tpl', $data); 
$dom = new DOMDocument(); 
@$dom->loadHTML($output); // @ is to suppress all warnings related to the fact that html is not a proper dom document 
$xpath = new DOMXPath($dom); 

$match = $xpath->query('//table[@class="myclass"]'); 

/* $match is not an array, it implements 'Traversable', you can't access your <table> node using $match[0], 
you need a foreach that will only loop once if you have one <table class="myclass"> element */ 
foreach($match as $table) { 
    $json['output'] = $table->ownerDocument->saveHTML($table); // saveHTML allows you to get the output in an HTML string 
} 

注:请注意,您需要在情况下更改此代码你有多个<table class="myclass">,我会建议使用iterator_to_array($match);到节点列表转换到一个数组因此您可以使用$match[0]...访问它并避免使用foreach