**Do you want to request a *feature* or report a *bug*?**
Bug

**What is the current behavior?**
When an input field changes from "email" to "text", an exception TypeError will be thrown from setSelection.
![Screenshot](https://raw.githubusercontent.com/adrianimboden/react-bug-reproduction/master/screenshot.png)

**Reproduction**
See here: https://github.com/adrianimboden/react-bug-reproduction

**What is the expected behavior?**
It should not crash because of an uncaught exception

**Which versions of React, and which browser / OS are affected by this issue? Did this work in previous versions of React?**
master (https://github.com/facebook/react/commit/4ca7855ca062d5d7dfca83c86acf46731e1e57ef)
Firefox

This would be my proposed change to fix the issue: https://github.com/adrianimboden/react/commit/db923b8c3c1cb23ad9fb150c160ce56f39dd3cae
const curFocusedElem = getActiveElement();
  const priorFocusedElem = priorSelectionInformation.focusedElem;
  const priorSelectionRange = priorSelectionInformation.selectionRange;
  if (curFocusedElem !== priorFocusedElem && isInDocument(priorFocusedElem)) {
    if (hasSelectionCapabilities(priorFocusedElem)) {
      setSelection(priorFocusedElem, priorSelectionRange);
    }
    
    const ancestors = [];
    let ancestor = priorFocusedElem;
    while ((ancestor = ancestor.parentNode)) {
      if (ancestor.nodeType === ELEMENT_NODE) {
        ancestors.push({
          element: ancestor,
          left: ancestor.scrollLeft,
          top: ancestor.scrollTop,
        });
      }
    }
    priorFocusedElem.focus();
    for (let i = 0; i < ancestors.length; i++) {
      const info = ancestors[i];
      info.element.scrollLeft = info.left;
      info.element.scrollTop = info.top;