[英]Javascript: How to tell if a span is the first thing in a paragraph?
我是一名目标C程序员,并且在我的最新项目中需要一些Javascript。 一个星期前,我从未使用过任何JavaScript。 我已经花了几个小时解决这个特定的问题,无法解决。 我对javascript几乎一无所知,因此,如果我犯了任何基本错误(很可能),我会提前道歉。
基本上我有一个html页面。 页面中有许多自定义跨度标签。 我需要一个函数来告诉我是否某个特定的span标签是段落中的第一件事(而不仅仅是第一个span)。 例如,如果html看起来像这样:
<p><span class="myClass">The</span> quick brown fox jumps over the lazy <span class="myClass">dog.</span></p>
然后我用
var spanList = Document.getElementsByClassName("myClass");
我需要一个返回TRUE的函数
isFirstInParagraph(spanList[0]); //ie. the word "The"
和FALSE为
isFirstInParagraph(spanList[1]); // ie. the word "dog."
在以下情况下,两个跨度都将返回FALSE,因为这两个都不是该段中的第一件事。
<p>The <span class="myClass">quick</span> brown fox jumps over the lazy <span class="myClass">dog.</span></p>
我希望附加一些半有效的代码,但是我所做的一切都接近完成。 在我看来,解决此问题的一种方法是找到SPAN相对于段落的范围偏移,并查看其是否为零。 但是我花了数小时阅读文档,无法弄清楚。 我忍不住认为这是因为我对javascript / html中的一般概念和术语缺乏理解。
可能相关的事情:
提前致谢
一个支持浏览器的功能,用于查找所有 span
元素,这些元素是其各自父级的第一个孩子:
function allFirstChildSpans () {
return document.querySelectorAll('span:first-child');
}
JS小提琴演示 。
测试给定 span
元素是否为其父元素的第一个孩子的函数:
function isFirstChild(elem) {
return null === elem.previousSibling;
}
JS小提琴演示 。
假设您只想测试span
是否是其父级的第一个childNode,那么实际上要简单得多:
JS小提琴演示 。
function isFirstChild(elem) {
return elem.firstChild === elem;
}
JS小提琴演示 。
还有一个简单的原型扩展,可以将isFirstChild()
方法添加到各个HTMLElement
节点:
HTMLElement.prototype.isFirstChild = function () {
return this.parentNode.firstChild === this;
};
JS小提琴演示 。
获取所有跨度的列表:
spanList = document.getElementsByTagName("span"); // all spans in document
然后函数应如下所示:
function isFirstInParagraph(span)
{
var p = span.parentNode;
if (p.nodeName === "P") // is span contained within 'p'
{
if (p.firstChild === span)
return true;
else
return false;
}
else
{
return false;
}
}
如果要在跨度之前忽略纯文本( 不是标签 ),则可以使用
function isFirstInParagraph(span){
var parent = span.parentNode;
return parent.getElementsByTagName('*')[0] === span;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.