为什么Array.from返回[object HTMLParagraphElement]而不是段落中的内容?

时间:2019-07-11 19:11:57

标签: javascript html arrays dom

我试图让Javascript可以根据页面上其他位置的内容(特别是购物车摘要中的商品名称)来读写段落。问题是我无法让Javascript正确编写它们。

我需要被写成的段落是“订单包括:产品1,产品2等”。而是返回“ Order Includes:[对象HTMLParagraphElement],[对象HTMLParagraphElement]等”。

 PXSelect<CSAttribute, Where<CSAttribute.attributeID, Equal<Required<CSAttribute.attributeID>>>>.Select(Base, "SALESGOALY");

我尝试使用

[PXDBInt]
[PXDefault(1)]
[PXUIField(DisplayName = "Control Type", Visibility = PXUIVisibility.SelectorVisible)]
[PXIntList(new int[] {1, 2, 6, 4, 5}, new string[] {"Text", "Combo", "Multi Select Combo", "Checkbox", "Datetime"})]
public virtual int? ControlType
{
  get
  {
    return this._ControlType;
  }
  set
  {
    this._ControlType = value;
  }
}

<td><span style=\"font-size:16px;color:#FFF;\">|</span>Content</td>

但是两者都返回未定义。

2 个答案:

答案 0 :(得分:2)

Document.getElementsByClassName()方法返回DOM元素的集合。当将方法返回的HTMLCollection转换为带有Array.from()的数组时,请使用回调从元素中获取innerText:

var prods = document.getElementsByClassName("cartitems");
var items = Array.from(prods, el => el.innerText);
document.getElementById("printItems").innerHTML = "Order Includes: " +
  items.join(', ');
<!-- Cart Summary -->
<p class="cartitems" id="Quantity">Product 1</p>
<p class="cartitems" id="Quantity">Product 2</p>

<!-- Paragraph to be written -->
<p id="printItems"></p>

答案 1 :(得分:0)

document.getElementsByClassName返回的是一个HTMLCollection (HMTLCollection MDN Docs

这是DOM的一部分,是直接元素。因此,您不能将其直接解析为数组,可以使用以下方法解析为所需的数组:

var prods = document.getElementsByClassName("cartitems"); var parsedArray = Array.from([].slice.call(prods)); document.getElementById("printItems") = "Order Includes: " + items;

如有关Harpo回复(Harpo response)的建议

注意:在这种情况下使用Array.from是可选的,因为slice返回的是它自己的数组。