Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript访问嵌套标记之前的文本_Javascript_Html_Nested Lists - Fatal编程技术网

javascript访问嵌套标记之前的文本

javascript访问嵌套标记之前的文本,javascript,html,nested-lists,Javascript,Html,Nested Lists,如果我有 <ul> <li>...</li> <li>...</li> <li>Text before nested content <ul> <li>...</li> <li>...</li> </ul> </li> </ul> 嵌套内容之前的文本 如

如果我有

<ul>
  <li>...</li>
  <li>...</li>
  <li>Text before nested content
    <ul>
      <li>...</li>
      <li>...</li>
    </ul>
  </li>
</ul>
  • 嵌套内容之前的文本
如何通过JavaScript访问嵌套内容之前的唯一
文本而不将其存储在元素中?

您应该迭代直到找到嵌套内容,然后返回将包含文本的第一个子节点

var top = document.getElementsByTagName("ul")[0];
for( var child in top ){
 var c = top[child];
 if( !c.hasOwnProperty("nodeName") )continue;
 if( c.children.length > 0 ){
  alert(c.childNodes[0].textContent);
  break;
 }
}

这也是jQuery解决方案

您可以设置
li
元素的
class
id
(任何允许您轻松选择
元素的内容),并使用以下代码获取所需数据:

$("<SELECTOR FOR LI>")
    .clone()    // clone the element
    .children() // select all the children
    .remove()   // remove all the children
    .end()      // again go back to selected element
    .text();    // get the text of element
$(“”)
.clone()//克隆元素
.children()//选择所有子项
.remove()//删除所有子项
.end()//再次返回到所选元素
.text();//获取元素的文本
欲了解更多详情,请阅读
您还可以在中查看此工作示例

更新

您也可以通过使用
纯JavaScript
来实现这一点

只需在子节点(如果至少有一个)上迭代
,检查节点类型(
3
,表示它是
文本节点
),如果它的
为true
concat
则与其余节点一起检查文本。

以下是中的工作示例。
有关节点类型的更多信息,请查看。

此外,您还可以找到有关
nodeType
nodeName
nodeValue
属性的有用信息。

不确定“不将其存储在元素中”是什么意思?您是否将此结构作为字符串,并且不想将其放入DOM中?我的意思是,如果在嵌套内容之前有
Text
,则可以直接访问它(例如,在jquery中,
txt=$('span').Text()
),但如果它与示例中一样,这是一个非常优雅的解决方案,谢谢。还有一个简单的JavaScript版本吗?我很高兴能帮助你。