如果两个属性具有相同的值id="xyz" name="xyz"
,则为html控制属性提供的首选项是什么?
我的代码如下所示:
<iframe scrolling="no" width="100%" name="topFrame" id="topFrame" frameborder="0" height="100%" runat="server"></iframe>
我正在尝试通过该属性访问iframe。因此,当我将iframe称为javascript:parent.frames['topFrame']
时,其中一个值将是首选
答案 0 :(得分:0)
并非所有HTML对象都可以拥有名称,并且可能不赞成使用表单元素。
在您的情况下,首选项不相关,但您访问框架的方式是:
使用parent.frames['topFrame']
的DOM访问将使用名称,但在名称/ ID或框架集合重载的浏览器中除外 - 但您需要位置:
<a href="javascript:parent.frames['topFrame'].location='otherpage'">...
如果您想使用ID,则需要src
<a href="javascript:parent.document.getElementById('topFrame').src='otherpage'">...
答案 1 :(得分:0)
首先要注意的是window.frames
window
为id="a"
:
窗口,框架和自身IDL属性都必须返回Window对象的浏览上下文的WindowProxy对象。
规范的相关部分是just an alias:
支持的属性名称随时由树形顺序组成,忽略以后的重复项:
- 活动文档的任何子浏览上下文的浏览上下文名称,其名称不是空字符串,
- 活动文档中具有非空名称内容属性的所有a,applet,area,embed,form,frameset,img和object元素的name content属性的值,并且
- 活动文档中具有非空id内容属性的任何HTML元素的id内容属性的值。
所以哪一个是“首选”并不重要。
如果元素的id和名称相同,则将使用一个来确定名称,另一个将被忽略。如果使用name="a"
并忽略a
,则会获得a
。如果是相反的方式,你仍然获得getElementById
。
如果元素的id和名称不同,那么它们都可以用来引用它。
如果两个不同的元素在name和id属性之间共享一个值,那么首先出现的元素将采用该名称。使用哪个特定属性并不重要。
不建议直接使用id和name属性。它们可以与窗口对象的现有属性冲突。最好使用querySelector
或static SemaphoreSlim sem = new SemaphoreSlim(1,1);
public void Save()
{
SaveAsync();
public async Task SaveAsync()
{
await sem.WaitAsync();
try{
this.customer.OrderCount = this.orders.Count();
this.customer.OrderTotal = this.orders.Sum(o => x.Total);
this.customerRepo.Save();
}finally{
sem.Release();
}
}
}
public async Task LoadAsync()
{
await sem.WaitAsync();
try{
this.customer = await this.customerRepo.GetCustomerAsync(...);
this.orders = await this.customerRepo.GetOrdersAsync(...);
}finally{
sem.Release();
}
}
,这样您就可以明确地说您正在寻找DOM中的元素。