【发布时间】:2020-07-13 10:46:54
【问题描述】:
我是codeigniter的新手。我得到的html字符串表单数据库如下所示
<div class="rockfm-form-container uiform-wrap">
<div class="rockfm-alert-container"></div>
<form class="rockfm-form" action="" name="" method="post" data-zgfm-type="1" enctype="multipart/form-data" id="rockfm_form_7">
<input type="hidden" value="7" class="_rockfm_form_id" name="_rockfm_form_id">
<input type="hidden" value="0" class="_rockfm_wizard_st" >
<input type="hidden" value="PGRpdiBjbGFzcz0icm9ja2ZtLWFsZXJ0IHJvY2tmbS1hbGVydC1zdWNjZXNzIj5TdWNjZXNzISBGb3JtIHdhcyBzZW50IHN1Y2Nlc3NmdWxseS48L2Rpdj4=" name="_rockfm_onsubm_smsg" class="_rockfm_onsubm_smsg" > <!--- ajax or post --->
<input type="hidden" value="1" class="_rockfm_type_submit" name="_rockfm_type_submit">
<input type="hidden" value="rocket_front_submitajaxmode" name="action">
<div class="uiform-main-form">
<div class="uiform-step-content" >
<div id="rockfm_uiibpy0eewu" data-idfield="uiibpy0eewu" data-typefield="33" class="rockfm-heading rockfm-field " ></div>
<div id="rockfm_uiya0wevyae" data-idfield="uiya0wevyae" data-typefield="28" class="rockfm-preptext rockfm-field rockfm-required " data-val-type="4"></div>
<div id="rockfm_ui04fxilqp6" data-idfield="ui04fxilqp6" data-typefield="7" class="rockfm-textarea rockfm-field " ></div>
<div id="rockfm_uiwdtl19w05" data-idfield="uiwdtl19w05" data-typefield="10" class="rockfm-select rockfm-field " ></div>
<div id="rockfm_uiksx46ggj9" data-idfield="uiksx46ggj9" data-typefield="12" class="rockfm-fileupload rockfm-field " ></div>
<div id="rockfm_ui2jrdo8mcp" data-idfield="ui2jrdo8mcp" data-typefield="20" class="rockfm-submitbtn rockfm-field " ></div>
</div>
</div>
</form>
</div>
我有另一个类型字段表,如图所示
html 字符串转换为 DOM 并添加检查条件 if typefieldid = 10 is flag_status = 0 然后仅删除此 div <div id="rockfm_uiwdtl19w05" data-idfield="uiwdtl19w05" data-typefield="10" class="rockfm-select rockfm-field " ></div> 但这给了我这样的代码
<div id="rockfm_uiibpy0eewu" data-idfield="uiibpy0eewu" data-typefield="33" class="rockfm-heading rockfm-field "></div>
<div id="rockfm_uiya0wevyae" data-idfield="uiya0wevyae" data-typefield="28" class="rockfm-preptext rockfm-field rockfm-required "></div>
<div id="rockfm_ui04fxilqp6" data-idfield="ui04fxilqp6" data-typefield="7" class="rockfm-textarea rockfm-field "></div>
<div id="rockfm_uiksx46ggj9" data-idfield="uiksx46ggj9" data-typefield="12" class="rockfm-fileupload rockfm-field "></div>
<div id="rockfm_ui2jrdo8mcp" data-idfield="ui2jrdo8mcp" data-typefield="20" class="rockfm-submitbtn rockfm-field "></div>
问题是当 typefield = 10 是 flag_status = 0 时,它的删除 <div id="rockfm_uiwdtl19w05" data-idfield="uiwdtl19w05" data-typefield="10" class="rockfm-select rockfm-field " ></div> 但 html 字符串中的其他信息也被删除。我展示了控制器函数的代码,其中我将 html 字符串转换为 DOM 文档,获取 fby_id 和 flag_status 表单类型字段表的记录并制作此记录的数组。然后使用 DOM 查询进行数据类型字段的 foreach 循环以获取数据类型字段的属性值,然后为 if 0 = 1 添加检查条件,然后删除特定的 div
还有一个问题是如何在根据条件删除特定 div 后在视图文件中传递和显示最终数据。这是控制器功能的代码
public function getform() {
$form_id = ($this->input->post('id')) ? Uiform_Form_Helper::sanitizeInput($this->input->post('id')) : 0;
$data = array();
if (intval($form_id) === 0) {
return;
} else {
$rdata = $this->model_forms->getFormById($form_id);
}
$response = array();
if (!empty($rdata)) {
$response['html_content'] = Uiform_Form_Helper::encodeHex($rdata->fmb_html);
}
$html = $rdata->fmb_html;
$doc = new DOMDocument();
$doc->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DOMXPath($doc);
$fields = $this->model_fields->getAllFieldsType();
$field_array =array();
foreach ($fields as $value) {
$field_array[$value->fby_id] = $value->flag_status;
}
foreach ($xpath->query("//div[@data-typefield]") as $item)
{
$typefield = $item->getAttribute('data-typefield');
if($field_array[$typefield] == 1)
{
$item->outertext = '';
$doc->saveHTML($item);
}
}
$data = array();
$json = $response;
$data['json'] = $response;
$this->load->view('html_view', $data);
}
请指导我是否有任何选项可以从 HTML DOM 中仅删除特定的 div。我希望我的代码像这样输出
<div class="rockfm-form-container uiform-wrap">
<div class="rockfm-alert-container"></div>
<form class="rockfm-form" action="" name="" method="post" data-zgfm-type="1" enctype="multipart/form-data" id="rockfm_form_7">
<input type="hidden" value="7" class="_rockfm_form_id" name="_rockfm_form_id">
<input type="hidden" value="0" class="_rockfm_wizard_st" >
<input type="hidden" value="PGRpdiBjbGFzcz0icm9ja2ZtLWFsZXJ0IHJvY2tmbS1hbGVydC1zdWNjZXNzIj5TdWNjZXNzISBGb3JtIHdhcyBzZW50IHN1Y2Nlc3NmdWxseS48L2Rpdj4=" name="_rockfm_onsubm_smsg" class="_rockfm_onsubm_smsg" > <!--- ajax or post --->
<input type="hidden" value="1" class="_rockfm_type_submit" name="_rockfm_type_submit">
<input type="hidden" value="rocket_front_submitajaxmode" name="action">
<div class="uiform-main-form">
<div class="uiform-step-content" >
<div id="rockfm_uiibpy0eewu" data-idfield="uiibpy0eewu" data-typefield="33" class="rockfm-heading rockfm-field " ></div>
<div id="rockfm_uiya0wevyae" data-idfield="uiya0wevyae" data-typefield="28" class="rockfm-preptext rockfm-field rockfm-required " data-val-type="4"></div>
<div id="rockfm_ui04fxilqp6" data-idfield="ui04fxilqp6" data-typefield="7" class="rockfm-textarea rockfm-field " ></div>
<div id="rockfm_uiksx46ggj9" data-idfield="uiksx46ggj9" data-typefield="12" class="rockfm-fileupload rockfm-field " ></div>
<div id="rockfm_ui2jrdo8mcp" data-idfield="ui2jrdo8mcp" data-typefield="20" class="rockfm-submitbtn rockfm-field " ></div>
</div>
</div>
</form>
</div>
【问题讨论】:
标签: php html codeigniter