我有一个asp.net webform,其中包含以下脚本(在单独的.js文件中):
function pageLoad() {
var mpe = $find("mpeEmpresa");
mpe.add_shown(onShown);
$addHandler(document, "keydown", onKeyDown);
}
function onShown() {
var background = $find("mpeEmpresa")._backgroundElement;
background.onclick = function() {
$find("mpeEmpresa").hide();
}
}
不幸的是,它不起作用,因为asp.net 3.5更改了元素id。我能让它发挥作用的唯一方法是使用ctl00_ContentPlaceHolder1_empresaFilha_mpeEmpresa
作为ID。
当然我可以使用asp.net端的<%= mpeEmpresa.ClientID %>
,它可以工作,但是我必须将它作为var传递给我的外部.js文件,这并不是我想要完成的
我已经搜索了几种方法来部分地通过它的ID名称选择元素,但是无法使它们中的任何一个工作......是否有保证的方式?
答案 0 :(得分:0)
我可以在你的问题上看到JQuery标签,所以你可以轻松地使用它:
$('div[id*="mpeEmpresa"]')
据我所知,ContentPlaceHolders
呈现为div
。
<强>更新强>
如果您还需要选择empresaFilha
,则无法使用上述选择器。
因为$('div[id*="mpeEmpresa"]')
会同时选择ctl00_ContentPlaceHolder1_empresaFilha
和ctl00_ContentPlaceHolder1_empresaFilha_mpeEmpresa
。
所以你需要使用它:
仅选择mpeEmpresa
:
$('div[id*="mpeEmpresa"]').css("background-color","blue");
仅选择empresaFilha
:
$('div[id*="mpeEmpresa"]').parent('div[id*="empresaFilha"]').css("background-color","red");
或类似的东西,也许这段代码没有如此优化,因为我没有看到你的ASP代码或渲染的HTML,所以必须提供一般的解决方案。
答案 1 :(得分:0)
你可以简单地使用这个
var mpe=$('div[id$="mpeEmpresa"]');
或
var mpe=$find('div[id$="mpeEmpresa"]');