GVKun编程网logo

为什么element.style在JS中总是返回空?(js中的element)

19

在本文中,我们将带你了解为什么element.style在JS中总是返回空?在这篇文章中,我们将为您详细介绍为什么element.style在JS中总是返回空?的方方面面,并解答js中的element

在本文中,我们将带你了解为什么element.style在JS中总是返回空?在这篇文章中,我们将为您详细介绍为什么element.style在JS中总是返回空?的方方面面,并解答js中的element常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效的ArrayList 中 elementData 为什么被 transient 修饰?、c# – 如何确定为什么Enyim memcache在存储项目时返回false?、com.google.gwt.dom.client.StyleElement的实例源码、css – 元素检查器中的element.style?

本文目录一览:

为什么element.style在JS中总是返回空?(js中的element)

为什么element.style在JS中总是返回空?(js中的element)

display:block在CSS中定义时,element.style.display总是返回空。

console.log(document.getElementById(''test'').style.display)#map {display: block;}<div id="test">test</div>

但是,如果您在该元素中设置样式,则可以获取style.display详细信息。

    console.log(document.getElementById(''test'').style.display) <divid="test">test</div>

我的问题不同。

内联样式不是编码的好方法。因此,我们总是在CSS中分配样式。但是,为什么在提供style属性CSS而不是通过element
时却显示为空?JavaScript是否特别无法读取cssstyle属性?

您可以在下面检查,即使我提供了,所有样式属性都为空display: block; align-content:center;为什么?

console.log(document.getElementById(''test'').style)#map {display: block;align-content:center;}<div id="test">test</div>

答案1

小编典典

element.style返回html文档中使用的内联样式,由于该样式不是直接在html中设置的,因此您将获得且值为空

您正在寻找的是computeedStyle,它将返回应用于元素的样式

console.log(window.getComputedStyle(document.getElementById(''test'')).display)#map {      display: block;      align-content:center;    }<div id="test">test</div>

ArrayList 中 elementData 为什么被 transient 修饰?

ArrayList 中 elementData 为什么被 transient 修饰?

  Java 的 ArrayList 中,定义了一个数组 elementData 用来装载对象的,具体定义如下:

/**
 * The array buffer into which the elements of the ArrayList are stored.
 * The capacity of the ArrayList is the length of this array buffer. Any
 * empty ArrayList with elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA
 * will be expanded to DEFAULT_CAPACITY when the first element is added.
 */
transient Object[] elementData; // non-private to simplify nested class access

transient 用来表示一个域不是该对象序行化的一部分,当一个对象被序行化的时候,transient 修饰的变量的值是不包括在序行化的表示中的。但是 ArrayList 又是可序行化的类,elementData 是 ArrayList 具体存放元素的成员,用 transient 来修饰 elementData,岂不是反序列化后的 ArrayList 丢失了原先的元素?
       其实玄机在于 ArrayList 中的两个方法:

/**
 * Save the state of the <tt>ArrayList</tt> instance to a stream (that
 * is, serialize it).
 *
 * @serialData The length of the array backing the <tt>ArrayList</tt>
 *             instance is emitted (int), followed by all of its elements
 *             (each an <tt>Object</tt>) in the proper order.
 */
private void writeObject(java.io.ObjectOutputStream s)
    throws java.io.IOException{
    // Write out element count, and any hidden stuff
    int expectedModCount = modCount;
    s.defaultWriteObject();
 
    // Write out size as capacity for behavioural compatibility with clone()
    s.writeInt(size);
 
    // Write out all elements in the proper order.
    for (int i=0; i<size; i++) {
        s.writeObject(elementData[i]);
    }
 
    if (modCount != expectedModCount) {
        throw new ConcurrentModificationException();
    }
}

 

/**
 * Reconstitute the <tt>ArrayList</tt> instance from a stream (that is,
 * deserialize it).
 */
private void readObject(java.io.ObjectInputStream s)
    throws java.io.IOException, ClassNotFoundException {
    elementData = EMPTY_ELEMENTDATA;
 
    // Read in size, and any hidden stuff
    s.defaultReadObject();
 
    // Read in capacity
    s.readInt(); // ignored
 
    if (size > 0) {
        // be like clone(), allocate array based upon size not capacity
        ensureCapacityInternal(size);
 
        Object[] a = elementData;
        // Read in all elements in the proper order.
        for (int i=0; i<size; i++) {
            a[i] = s.readObject();
        }
    }
}

       ArrayList 在序列化的时候会调用 writeObject,直接将 size 和 element 写入 ObjectOutputStream;反序列化时调用 readObject,从 ObjectInputStream 获取 size 和 element,再恢复到 elementData。
       为什么不直接用 elementData 来序列化,而采用上诉的方式来实现序列化呢?原因在于 elementData 是一个缓存数组,它通常会预留一些容量,等容量不足时再扩充容量,那么有些空间可能就没有实际存储元素,采用上诉的方式来实现序列化时,就可以保证只序列化实际存储的那些元素,而不是整个数组,从而节省空间和时间。

 

transient 分析
注意到的是 ArrayList 和 LinkedList 中的一些变量被 transient 关键字修饰。如 ArrayList 中的 elementData 数组,LinkedList 中指向头结点和尾结点的指针等。下面解释一下 transient 关键字的作用:

java 的 serialization 提供了一种持久化对象实例的机制。当持久化对象时,可能有一个特殊的对象数据成员,我不想用 serialization 机制来保存它。为了在一个特定对象的域上关闭 serialization,可以在这个域前加上关键字 transient。transient 是一个关键字,用来表示一个于不是该对象串行化的一部分。当一个对象被串行化的时候,被 transient 关键字修饰的变量的值不包括在串行化的表示中,非 transient 型的变量是被包括进去的。

那么既然用于保存数据的变量都被 transient 修饰,ArrayList 和 LinkedList 还能不能被序列化呢?

答案是可以的。对于 ArrayList 来说,如果不把 elementData 申明为 transient 类型,那么序列化的时候里面的数据都会被序列化,但是 elementData 这个数组很大程序是存在空值的情况(即 size《length),这时如果序列化就会导致磁盘空间被浪费。为了解决这个问题,ArrayList 将 elementData 申明为 transient,自己重写了 writeObject 方法,保证只序列化 elementData 中有数据的那部分,ArrayList 中的 writeObject 方法如下:

(见上文)

注意的是这里面也用到了 modCount,如果不一致说明这段时间集合发生了改变,抛出异常。

LinkedList 中的序列化和 ArrayList 中的序列化还不一样,LinkedList 中不会存在说有多余的元素这种说法,但是由于 LinkedList 中申明为 transient 类型的数据都可以不用进行序列化,所以进行申明,比如分别指向头结点和尾结点的 first 和 last 指针。

c# – 如何确定为什么Enyim memcache在存储项目时返回false?

c# – 如何确定为什么Enyim memcache在存储项目时返回false?

如何确定为什么Enyim从以下调用返回false:
cache.Store(Enyim.Caching.Memcached.StoreMode.Set,key,value);

其他项目的存储空间很好,所以连接到服务器似乎并不是一个问题.该对象似乎不超过1 MB.

那么如何确定是什么导致的错误?

解决方法

另一件事要检查的是,您存储的整个对象图是[Serializable].如果不是,那么Enyim会抛出一个序列化异常,这将告诉你哪个类型需要被标记为可序列化.按照 https://github.com/enyim/EnyimMemcached/wiki/Configure-Logging中的说明启用日志记录.

com.google.gwt.dom.client.StyleElement的实例源码

com.google.gwt.dom.client.StyleElement的实例源码

项目:hawkbit    文件:ViewClientCriterion.java   
/**
 * Styles a multi-row selection with the number of elements.
 *
 * @param drag
 *            the current drag event holding the context.
 */
void setmultirowDragdecoration(VDragEvent drag) {
    Widget widget = drag.getTransferable().getDragSource().getWidget();

    if (widget instanceof VScrollTable) {
        VScrollTable table = (VScrollTable) widget;
        int rowCount = table.selectedRowKeys.size();

        Element dragCountElement = Document.get().getElementById(SP_DRAG_COUNT);
        if (rowCount > 1 && table.selectedRowKeys.contains(table.focusedRow.getKey())) {
            if (dragCountElement == null) {
                dragCountElement = Document.get().createStyleElement();
                dragCountElement.setId(SP_DRAG_COUNT);
                HeadElement head = HeadElement.as(Document.get().getElementsByTagName(HeadElement.TAG).getItem(0));
                head.appendChild(dragCountElement);
            }
            SafeHtml formattedCssstyle = getDraggableTemplate().multiSelectionStyle(determineActiveTheme(drag),String.valueOf(rowCount));
            StyleElement dragCountStyleElement = StyleElement.as(dragCountElement);
            dragCountStyleElement.setInnerSafeHtml(formattedCssstyle);
        } else if (dragCountElement != null) {
            dragCountElement.removeFromParent();
        }
    }
}
项目:jetpad-projectional-open-source    文件:Tooltip.java   
private static Registration injectCornerStyle(String id,Cell cell) {
  Color borderColor = cell.get(Cell.BORDER_COLOR);
  String border = borderColor == null ? "none" : "1px solid " + borderColor.toCssColor();
  Color backgroundColor = cell.get(Cell.BACKGROUND);
  String background = backgroundColor == null ? Color.WHITE.toCssColor() : backgroundColor.toCssColor();
  final StyleElement styleElement = StyleInjector.injectStylesheet("." + id
      + "::before { border-top: " + border + "; border-left: " + border + "; " +
      "background: linear-gradient(135deg," + background + " 0%," + background
      + " 70%,rgba(0,0) 71%,0) 100%) }");
  StyleInjector.flush();
  return new Registration() {
    @Override
    protected void doRemove() {
      styleElement.removeFromParent();
    }
  };
}
项目:hawkbit    文件:ViewClientCriterionTest.java   
@Test
@Description("Check multi row drag decoration with a valid multi selection")
public void processmultirowDragdecorationMultiSelection() {
    final ViewClientCriterion cut = new ViewClientCriterion();

    // prepare table
    final VScrollTable table = Mockito.spy(new VScrollTable());
    table.selectedRowKeys.add("one");
    table.selectedRowKeys.add("two");
    table.focusedRow = Mockito.mock(VScrollTable.VScrollTableBody.VScrollTableRow.class);
    when(table.focusedRow.getKey()).thenReturn("one");

    // prepare drag-event with table widget:
    final VDragEvent dragEvent = CriterionTestHelper.createMockedVDragEvent("thisId",table,"myTheme");
    dragEvent.getTransferable().getDragSource().getConnection().getUIConnector();

    // prepare document
    final Document document = Document.get();
    final StyleElement ele = Mockito.spy(StyleElement.class);
    when(ele.getTagName()).thenReturn(StyleElement.TAG);
    when(document.getElementById(ViewClientCriterion.SP_DRAG_COUNT)).thenReturn(ele);

    try {
        // act
        cut.setmultirowDragdecoration(dragEvent);

        // assure that multi-row decoration for the table was processed
        verify(document).getElementById(ViewClientCriterion.SP_DRAG_COUNT);

        // assure that no multi selection was detected
        verify(ele).setInnerSafeHtml(any(SafeHtml.class));
    } finally {
        reset(Document.get());
    }
}
项目:gerrit    文件:Themer.java   
void init(Element css,Element header,Element footer) {
  cssElement = StyleElement.as(css);
  headerElement = header;
  footerElement = footer;

  csstext = getCsstext(this.cssElement);
  headerHtml = header.getInnerHTML();
  footerHtml = footer.getInnerHTML();
}
项目:qafe-platform    文件:MainController.java   
private void handleStyling(String css) {
    if ((css == null) || (css.length() == 0)) {
        return;
    }
    if (isIE()) {
        addStyleSheet(css);
    } else {
        // Append custom css style as last thing in the Head element
        Element head = Document.get().getElementsByTagName("head").getItem(0);
        StyleElement styleElement = Document.get().createStyleElement();
        styleElement.setType("text/css");
        styleElement.setInnerText(css);
        head.appendChild(styleElement);
    }
}
项目:gerrit    文件:Themer.java   
@Override
protected String getCsstext(StyleElement el) {
  return el.getCsstext();
}
项目:gerrit    文件:Themer.java   
@Override
protected void setCsstext(StyleElement el,String css) {
  el.setCsstext(css);
}
项目:gerrit    文件:Themer.java   
protected String getCsstext(StyleElement el) {
  return el.getInnerHTML();
}
项目:gerrit    文件:Themer.java   
protected void setCsstext(StyleElement el,String css) {
  el.setInnerHTML(css);
}
项目:xapi    文件:HtmlSnippetTest.java   
@Override
public StyleElement injectStyle(
    Class<? extends HasstyleResources> bundle,Class<?>[] styles
) {
  throw new UnsupportedOperationException();
}
项目:xapi    文件:HtmlSnippetTest.java   
@Override
public Out1<StyleElement> registerStyle(
    Class<? extends HasstyleResources> bundle,String css,Class<?>[] styles
) {
  throw new UnsupportedOperationException();
}

css – 元素检查器中的element.style?

css – 元素检查器中的element.style?

当我检查Chrome中的元素,在我的样式下,我有element.style {},这是什么?它包含我不包含在我的代码源中的样式。

解决方法

那些是内联样式。 它们来自style =“”属性,或者来自设置element.style.someProperty的Javascript代码。

关于为什么element.style在JS中总是返回空?js中的element的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于ArrayList 中 elementData 为什么被 transient 修饰?、c# – 如何确定为什么Enyim memcache在存储项目时返回false?、com.google.gwt.dom.client.StyleElement的实例源码、css – 元素检查器中的element.style?的相关知识,请在本站寻找。

本文标签: