【发布时间】:2013-10-11 07:46:58
【问题描述】:
我在获取父跨度的文本时遇到问题。这是我正在实现的代码
<span> hello this is test <span>click here</span></span>
我想通过点击click here 获得hello this test 内容。
谢谢
【问题讨论】:
-
你能输入你的代码吗?
标签: javascript
我在获取父跨度的文本时遇到问题。这是我正在实现的代码
<span> hello this is test <span>click here</span></span>
我想通过点击click here 获得hello this test 内容。
谢谢
【问题讨论】:
标签: javascript
如果你对jQuery没有问题,有这样的基本解决方案
HTML
<span> hello this is test <span class="button">click here</span></span>
jQuery
$(document).ready(function(){
$('.button').on('click', function(){
var parentElement = $(this).parent().clone();
parentElement.children('span').remove()
alert(parentElement.text());
});
});
【讨论】:
将您的 HTML 更改为:
<span> hello this is test <span onclick="showParentText(this)">click here</span></span>
并在脚本标签中添加如下函数:
window.showParentText = function(obj) {
var thisText = obj.outerHTML,
parentText = obj.parentNode.innerHTML;
alert(parentText.replace(thisText, ""));
}
在这里检查小提琴:http://jsfiddle.net/F7YFB/
【讨论】:
首先要做的是:您应该始终在mozilla site 上查阅 Html 和 Javascript 文档。看看下面的代码。 html 的结构方式是在 Element 节点之后总是出现 TextNode。在文档中阅读有关此内容的更多信息。因此,您希望在单击子 span 元素后显示此文本节点,因此您可以使用 DOM API 来获取您想要的内容:
<script>
function respond_to_click_event(event) {
alert(event.target.previousSibling.wholeText);
}
</script>
<span> hello this is test
<span onclick="respond_to_click_event(event)">click here</span>
</span>
【讨论】:
如果您使用的是 jQuery,可能是这样的,
$('span>span').parent('span').clone().find("span").empty().parent().text();
也是粗略的纯js方案
var childContent = document.querySelectorAll("span>span")[0].textContent;
var parentContent = "";
var allSpans = document.querySelectorAll("span");
allSpans = Array.prototype.slice.call(allSpans);
allSpans.forEach(function (spanEl) {
if (spanEl.textContent.replace(childContent,"").length>0) {
parentContent = spanEl.textContent.replace(childContent,"");
}
alert(parentContent);
});
但是,如果您添加一些其他人已经指出的事件或类名,则更好,因为如果您有更多跨度的孩子或父母等,情况会变得更糟
【讨论】:
使用 jQuery,您可以使用:$(this).parent().text();。
对于纯 JavaScript,请查看:Get parent element of a selected text
【讨论】: