JSP页面源码:
<%@ page contentType="text/html;charset=UTF-8" trimDirectiveWhitespaces="true" import="java.io.*,java.util.*"%>
<%@ include file="/common/taglibs.jsp"%>
<!DOCTYPE html>
<html id="htmlObject">
<head>
<title>123</title>
<%@ include file="/common/resource.jsp"%>
<script type="text/javascript">
$(document).ready(function(){
htmlTest();
});
function htmlTest() {
alert($("#valiSource").html());
}
function languageSelecter_onChanged(control) {
$control=$(control);
$form = $("#form-login");
$.post($control.attr("href"), $form.serialize(), function(html) {
//修改ajax加载为局部form-login加载,避免整个html中head部分文件资源重加载
$html=$(html);
//alert(html);
alert($html.find("#valiSource").html());
$("#divForm").html($html.find("#divForm").html());
//$("body").html(html);
$form.validationEngine({
autoPositionUpdate:true,
focusFirstField:true,
scroll:true
});
});
return false;
}
</script>
</head>
<body>
<form id="form-login" action="login!login.action" successAction="index.action" method="post">
<div id="divForm" align="center">
<div id="valiSource">
aaa
<script src="${ctx}/static/jquery-Validation-Engine/js/languages/jquery.validationEngine-${sessionScope.WW_TRANS_I18N_LOCALE}.js" type="text/javascript"></script>
</div>
<div style="width:350px" class="well">

<div  class="control-group">
<span id="errorMessage" class="error">
<s:property value="successErrorForm.errorMessage"></s:property>
</span>
</div>
<div class="control-group">
<span class="span1"><s:text name="label.login.name" /></span>
<s:textfield id="name" name="user.name" cssClass="validate[required]" />
</div>
<div class="control-group">
<span class="span1"><s:text name="label.login.password" /></span>
<s:password id="password" name="user.password" cssClass="validate[required]"/>
</div>
<div class="control-group">
<span class="span1"><s:text name="label.login.language" /></span>
<s:set name="SESSION_LOCALE" value="#session['WW_TRANS_I18N_LOCALE']"/>
<s:bean id="locales" name="com.wizarpos.tms.common.language.LanguageSelectList">
<s:param name="current" value="#SESSION_LOCALE == null ? locale : #SESSION_LOCALE"/>
</s:bean>
<s:select id="languageSelecter" href="login!changeLanguage.action" list="#locales.locales" listKey="value" listValue="key" value="#SESSION_LOCALE == null ? locale : #SESSION_LOCALE" name="request_locale" onchange="languageSelecter_onChanged(this)"/>
</div>
<div class="control-group">
<button type="submit" class="btn btn-primary">
          <s:text name="label.login.login" />
       </button>
<!--         <button type="button" onclick="closeme();" class="btn btn-primary"> -->
<%--            <s:text name="label.login.quit" /> --%>
<!--         </button> -->
</div>
<div class="control-group">
<a href="#" id="modifyPassword" url="authority/user-modify-password!input.action" dialogWidth="500" dialogHeight="400">
          <s:text name="label.login.modifyPassword" />
       </a>
       <a href="#" id="sendPassword" url="authority/user-send-password!input.action" dialogWidth="500" dialogHeight="200">
          <s:text name="label.login.sendPassword" />
       </a>
</div>
</div>
</div>
</form>
</body>
</html>
首先在刷新页面时,htmlTest()对话框显示结果为aaa
<script src="/tms/static/jquery-Validation-Engine/js/languages/jquery.validationEngine-en_US.js" type="text/javascript"></script>
然后点击语言切换,post返回切换语言后的本页源码alert(html):<!DOCTYPE html>
<html id="htmlObject">
<head>
<title>123</title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<meta http-equiv="Cache-Control" content="no-store"/>
<meta http-equiv="Pragma" content="no-cache"/>
<meta http-equiv="Expires" content="0"/><link href="/tms/static/bootstrap/2.1.0/css/bootstrap.min.css" type="text/css" rel="stylesheet" />
...
<script src="/tms/static/jquery-Validation-Engine/js/jquery.validationEngine.js" type="text/javascript"></script>
<script src="/tms/static/jquery-layout/1.2.0/js/jquery.layout.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){
htmlTest();
});
function htmlTest() {
alert($("#valiSource").html());
}
function languageSelecter_onChanged(control) {
$control=$(control);
$form = $("#form-login");
$.post($control.attr("href"), $form.serialize(), function(html) {
//修改ajax加载为局部form-login加载,避免整个html中head部分文件资源重加载
$html=$(html);
//alert(html);
alert($html.find("#valiSource").html());
$("#divForm").html($html.find("#divForm").html());
//$("body").html(html);
$form.validationEngine({
autoPositionUpdate:true,
focusFirstField:true,
scroll:true
});
});
return false;
}
</script>
</head>
<body>
<form id="form-login" action="login!login.action" successAction="index.action" method="post">
<div id="divForm" align="center">
<div id="valiSource">
aaa
<script src="/tms/static/jquery-Validation-Engine/js/languages/jquery.validationEngine-zh_CN.js" type="text/javascript"></script>
</div>
<div style="width:350px" class="well">

<div  class="control-group">
<span id="errorMessage" class="error">
</span>
</div>
<div class="control-group">
<span class="span1">用户名</span>
<tr>
    <td class="tdLabel"></td>
    <td
><input type="text" name="user.name" value="" id="name" class="validate[required]"/></td>
</tr>
</div>
<div class="control-group">
<span class="span1">密码</span>
<tr>
    <td class="tdLabel"></td>
    <td
><input type="password" name="user.password" id="password" class="validate[required]"/></td>
</tr>
</div>
<div class="control-group">
<span class="span1">语言</span>
<tr>
    <td class="tdLabel"></td>
    <td
><select name="request_locale" id="languageSelecter" onchange="languageSelecter_onChanged(this)" href="login!changeLanguage.action">
    <option value="zh_CN" selected="selected">中文</option>
    <option value="en_US">English</option>
</select>
</td>
</tr>
</div>
<div class="control-group">
<button type="submit" class="btn btn-primary">
          登录</button>
<!--         <button type="button" onclick="closeme();" class="btn btn-primary"> -->
<!--         </button> -->
</div>
<div class="control-group">
<a href="#" id="modifyPassword" url="authority/user-modify-password!input.action" dialogWidth="500" dialogHeight="400">
          修改密码</a>
       <a href="#" id="sendPassword" url="authority/user-send-password!input.action" dialogWidth="500" dialogHeight="200">
          找回密码</a>
</div>
</div>
</div>
</form>
</body>
</html>分析抓取这份html$html=$(html);
//alert(html);
alert($html.find("#valiSource").html());
却只能拿到aaa <script>标签部分拿不到,求问大神这是什么情况?
jqueryJSP元素解析

解决方案 »

  1.   

    .html()方法是会过滤掉脚本,css等这样不安全的代码的。
      

  2.   

    你把内容变成一个标签属性存起试试,就像input的value一样,去的时候直接取属性。
    例如
    <input id="xx" scripts='aaa<script src="/tms/static/jquery-Validation-Engine/js/languages/jquery.validationEngine-zh_CN.js" type="text/javascript"></script>'   />$("#xx").attr("scripts"); 来获取试试
      

  3.   

    解决了,#1楼正解,动态js被.html()过滤了,只好采用正则表达式截取内容后prepend手动添加进来var scriptPart = new RegExp("<script(.*)validationEngine-(.*)<\/script>");
    scriptSrc=scriptPart.exec(html);
    $("#divForm").prepend(scriptSrc[0]);