18

我有一个特定的 DIV 结构,在某处之间有一个锚标记。单击链接时,我需要获取span父元素中另一个元素的值div并执行某些操作(例如,提醒它)。

html是这样的:

...
<div id="div1">
  ...
  <span>This is reqd</span>
  ...
  <a href="#">Click Me </a>
  ...
</div>
...

整个div页面在页面中重复了很多次。当我点击a我想提醒“这是reqd”时。

可以这样搜索 HTML 吗?

4

5 回答 5

7

对于单个跨度元素,它应该很容易,。只需在单击链接时调用 myFunction(this) 并像这样操作 DOM:

function myFunction(currObj){
var parentofSelected = currObj.parentNode; // gives the parent DIV

var children = parentofSelected.childNodes;
for (var i=0; i < children.length; i++) {
    if (children[i].tagName = "span") {
        myValue= children[i].value;
        break;
    }
}
alert(myValue); // just to test

 } // end function

希望这有效。它对我有用!

于 2013-01-23T10:58:52.740 回答
4

由于<span>不是 that 的直接兄弟<a>我们不能调用.previousSiblingor .previousElementSibling。最好的解决方案可能是获取父级并查询<span>

document.getElementById( 'div1' ).getElementsByTagName( 'a' )[ 0 ].addEventListener('click', function() {
    alert( this.parentNode.getElementsByTagName( 'span' )[ 0 ].textContent );
}, false);

演示:http: //jsfiddle.net/cEBnD/

于 2013-01-23T10:49:48.210 回答
2

更新:有和没有 jQuery 的解决方案

这个答案因展示 jQuery 示例而遭到如此多的反对,因此我决定添加更多带有 vanilla JavaScript 的示例,以便任何人都可以选择是否使用 jQuery。

通常,您可以.previousSibling在 vanilla JavaScript 中使用,请参阅:

您可以.prev()在 jQuery 中使用,请参阅:

但是请记住,当您不知道整个 DOM 的确切结构时,这些可能不适用于更复杂的情况。

下面是几个使用 jQuery 和 vanilla JavaScript 实现该目标的示例,适用于具有固定 DOM 结构的简单案例和使用类的更复杂案例。

没有课

对于最简单的 DOM 结构,您可能会在所有链接上放置事件侦听器并依赖 DOM 的隐式知识,但这可能不适用于更复杂的情况 - 对于那些请参阅下面的类示例。

使用 jQuery:

$('a').click(function () {
  alert( $(this).prev().text() );
  return false;
});

演示

没有 jQuery:

document.querySelectorAll('a').forEach(link => {
  link.addEventListener('click', () => {
    alert(link.previousSibling.previousSibling.innerText);
  });
});

请注意,previousSibling必须使用两次,因为否则将使用 tha span 和 link 之间的空文本节点。

演示

使用类

如果span不是紧接在您的a元素之前,那么您可能还希望做一些不同的事情,还添加一些类以确保您的代码不会破坏页面上的任何其他链接:

使用 jQuery:

$('a.link').click(function () {
  alert( $(this).parent().find('span.text').text() );
  return false;
});

演示

没有 jQuery:

document.querySelectorAll('a.link').forEach(link => {
  link.addEventListener('click', () => {
    alert(link.parentNode.querySelector('span.text').innerText);
  });
});

演示

上面的代码将点击处理程序绑定到每个a具有类“link”的元素,这将使用类“text”警告其兄弟span元素包含的文本。(当然,类名应该比这更具描述性。)

于 2013-01-23T10:55:21.057 回答
1
<html>
<body>
    <div id="div1">
        <span>This is required</span>
        <a href="#" onclick="myclick(this.parentNode)">Click Me</a>
    </div>
</body>
<script>
    function myclick(x){
        var y = x.querySelector("span").innerHTML;
        alert(y)
    }
</script>
</html>

跨度的 insted你也可以给出类名 ,例如,

<span class="classname">This is required</span>
x.querySelector(".classname").innerHTML
于 2019-11-16T04:06:14.997 回答
-1

使用 jQuery:

$('#innerId').siblings()
于 2017-04-26T10:25:17.010 回答