Javascript 如何检索元素';s id由其;价值观;?

Javascript 如何检索元素';s id由其;价值观;?,javascript,html,getelementbyid,Javascript,Html,Getelementbyid,我目前正在进行Sharepoint自定义,遇到了一些问题,如果选择了特定的元素id,我需要调用函数。问题是每次安装Sharepoint实例时元素ID都会发生变化,所以我的目标是通过元素ID的“值”来标识元素ID。给我的问题一些背景,这是html(不能更改): 例如,我甚至希望通过使用span标记实现这样的效果(当然,由于多种原因,这永远不会起作用): var rispan=document.getElementsByTagName('span'); 对于(变量i=0,j=rispan.lengt

我目前正在进行Sharepoint自定义,遇到了一些问题,如果选择了特定的元素id,我需要调用函数。问题是每次安装Sharepoint实例时元素ID都会发生变化,所以我的目标是通过元素ID的“值”来标识元素ID。给我的问题一些背景,这是html(不能更改):

例如,我甚至希望通过使用span标记实现这样的效果(当然,由于多种原因,这永远不会起作用):

var rispan=document.getElementsByTagName('span');
对于(变量i=0,j=rispan.length;i
由于输入似乎是跨度中唯一的输入子级,因此获得以下内容相当简单:

var input = rispan[i].getElementsByTagName('input')[0]
...
input.onclick = new Function ...



应该使用
function(){}
语法来定义匿名函数<代码>新功能似乎不太适合您。另外,
onlick
已经过时了,很邪恶!如果存在
addEventListener
,则应使用它。否则,
attachEvent

由于输入似乎是span中唯一的输入子项,因此获得以下内容相当简单:

var input = rispan[i].getElementsByTagName('input')[0]
...
input.onclick = new Function ...



应该使用
function(){}
语法来定义匿名函数<代码>新功能似乎不太适合您。另外,
onlick
已经过时了,很邪恶!如果存在
addEventListener
,则应使用它。否则,
attachEvent

我会将我的代码放在一个具有固定id的div中,然后获取子项

var nodes = document.getElementByID('div_id').children;

有了这个,我将在循环中测试标记名,并在需要的地方附加onclick事件。

我将把代码放在一个具有固定id的div中,然后获取子项

var nodes = document.getElementByID('div_id').children;
有了这个,我将在循环中测试标记名,并在需要的地方附加onclick事件。

要匹配的结构:

<span class="ms-RadioText" title="Yes">
    <input id="378Ukj200" name="radio_button" value="ctl00" checked="checked" type="radio">
    <label for="378Ukj200">Yes</label>
</span>
使用允许CSS选择器的库。赢。

要匹配的结构:

<span class="ms-RadioText" title="Yes">
    <input id="378Ukj200" name="radio_button" value="ctl00" checked="checked" type="radio">
    <label for="378Ukj200">Yes</label>
</span>

使用允许CSS选择器的库。赢。

不确定您需要什么级别的兼容性,但在现代浏览器中,它可以简单到:

var inputs = document.querySelectorAll('input[title^="ctl"]');

[].forEach.call(inputs, function(input) {
  var label = input.nextSibling;

  input.addEventListener('click', function() {
    if (label.textContent == 'Yes') {
      ...
    }
  });
});

不确定您需要什么级别的兼容性,但在现代浏览器中,它可以简单到:

var inputs = document.querySelectorAll('input[title^="ctl"]');

[].forEach.call(inputs, function(input) {
  var label = input.nextSibling;

  input.addEventListener('click', function() {
    if (label.textContent == 'Yes') {
      ...
    }
  });
});


为什么要将函数封装在函数实例
新函数()
?有哪些原因?除了需要相应的输入元素之外,这似乎大部分都可以工作onclick@RobinvanBaalen额外的坏资产!(duh)@RobinvanBaalen以前的开发者。我们希望根除这种垃圾,但与此同时,客户用鞭子鞭打我们,让这东西重新启动和运行。@ExplosionPills我可能醒了太久,但这正是我一直坚持的,我需要一种提取元素的方法。为什么要将函数包装在函数实例
new Function()
?有哪些原因?除了需要相应的输入元素之外,这似乎大部分都可以工作onclick@RobinvanBaalen额外的坏资产!(duh)@RobinvanBaalen以前的开发者。我们希望根除这种垃圾,但与此同时,客户用鞭子鞭打我们,让它重新启动并运行。@ExplosionPills我可能醒了太久,但这正是我一直坚持的,我需要一种方法来吸收元素。我喜欢你的建议,但我有点困惑,你是说我可以在两个跨度上都使用这个吗?@Switchkick是
getElementsByTagName
是一种可用于所有节点(包括整个文档)的方法。我喜欢您的建议,但我有点困惑,您是否建议我可以在这两个跨度中使用此方法?@Switchkick yes
getElementsByTagName
是一种可用于包括整个文档在内的所有节点的方法而不是
inputs.forEach(函数(){})?我更喜欢较短的一个,但它有什么区别吗?@elclanrs这个解决方案在Firefox中工作得非常好,但IE的所有版本都抛出一个TypeError:无法获取属性“call”的值:对象为null或未定义的错误。这就是你指的吗?还是我在实现中遗漏了什么?@RobinvanBaalen:
inputs
是节点列表(类似数组的对象)而不是常规数组,因此它没有可用的数组方法。试试你的解决方案,它不会起作用,它会告诉你类似“Object”没有“forEach”的方法@elclars啊,谢谢你的澄清。我确实尝试过你的例子,但没有创建一个好的设置;我使用的是常规数组而不是节点列表。@Robinbanbaalen:如何使用常规数组?DOM中的元素总是以
Node
NodeList
的形式检索,除非您已经转换为类似
[].slice.call(els).forEach(function(){
。Why
[].forEach.call(inputs,function(){});
的数组,而不是
inputs.forEach(function(){});
?我更喜欢较短的一个,但它有什么区别吗?@elclanrs这个解决方案在Firefox中工作得非常好,但是IE的所有版本都会抛出一个TypeError:无法获取属性“call”的值:对象为null或未定义的错误。这是你指的吗?还是我在实现中遗漏了什么?@RobinvanBaalen:
inputs
是一个节点列表(类似数组的对象)而不是一个常规数组,因此它没有可用的数组方法。试试你的解决方案,它不会起作用,它会告诉你