GoLang - GoQuery HTML 插入失败
GoLang - GoQuery HTML Insertion Fails
我希望提取 elementB
,然后在元素 C
和 D
之前停止 - 即不提取内容 elementC
的 .text
和 elementD
。但是,我只知道如何提取整个div文本,使用Contents().Not
忽略elementC
,但仍然捕获elementD
。
这是我目前使用的代码:
Go 语言:
capturedText := s.Find("div").Contents().Not(".label").Text()
忽略 elementC
,但不忽略没有外部标签的 elementD
。
HTML:
<li><span><h2>elementA</h2></span><div>elementB<br><span class="label">elementC</span>elementD</div></li>
如何只捕获 <div>
中的 elementB
,而不捕获 elementC
和 elementD
?
编辑:
我试过像这样关闭 div 标签:
s.Find(".label").BeforeHtml(`</div>`)
也尝试过:
s.Find(".label").BeforeHtml(`</div><div>`)
并访问第一个 div
,忽略第二个 div
,现在应该有 elementD
和:
jp, _ := s.Find("div").First().Html()
但是,这不起作用。 </div>
似乎不能是开放标签 - 它需要 <div>...</div>
才能正确插入。但这不是我需要的,我只需要 </div>
或 </div><div>
来正确关闭第一个 div
。
解决这个问题的合适方法是什么?
由于我无法使用 'broken' 节点编辑 HTML,因此我选择了这个:
s.Find(".label").BeforeHtml(`|_SEPARATOR_|`) // Insert text separator into Html
preCleanNode := s.Find("div").Contents().Not(".label").Text() //Get Html as Text
cleanNode := strings.Split(preCleanNode, `|_SEPARATOR_|`) // Split text based on Text Separator
outputString := cleanNode[0] // Output our wanted text
我希望提取 elementB
,然后在元素 C
和 D
之前停止 - 即不提取内容 elementC
的 .text
和 elementD
。但是,我只知道如何提取整个div文本,使用Contents().Not
忽略elementC
,但仍然捕获elementD
。
这是我目前使用的代码:
Go 语言:
capturedText := s.Find("div").Contents().Not(".label").Text()
忽略 elementC
,但不忽略没有外部标签的 elementD
。
HTML:
<li><span><h2>elementA</h2></span><div>elementB<br><span class="label">elementC</span>elementD</div></li>
如何只捕获 <div>
中的 elementB
,而不捕获 elementC
和 elementD
?
编辑:
我试过像这样关闭 div 标签:
s.Find(".label").BeforeHtml(`</div>`)
也尝试过:
s.Find(".label").BeforeHtml(`</div><div>`)
并访问第一个 div
,忽略第二个 div
,现在应该有 elementD
和:
jp, _ := s.Find("div").First().Html()
但是,这不起作用。 </div>
似乎不能是开放标签 - 它需要 <div>...</div>
才能正确插入。但这不是我需要的,我只需要 </div>
或 </div><div>
来正确关闭第一个 div
。
解决这个问题的合适方法是什么?
由于我无法使用 'broken' 节点编辑 HTML,因此我选择了这个:
s.Find(".label").BeforeHtml(`|_SEPARATOR_|`) // Insert text separator into Html
preCleanNode := s.Find("div").Contents().Not(".label").Text() //Get Html as Text
cleanNode := strings.Split(preCleanNode, `|_SEPARATOR_|`) // Split text based on Text Separator
outputString := cleanNode[0] // Output our wanted text