Если вам абсолютно нужна локальная копия файла, вам нужно будет открыть InputStream
копию содержимого в локальный файл, в котором вы знаете путь, а затем перейти оттуда. Sidenote: Guava ByteStreams#copy
- это простой способ выполнить это.
Конечно, этот файл больше не поддерживается исходным источником Uri, поэтому я не думаю, что это то, что вы хотите. Вместо этого вы должны работать с API-интерфейсом Uri. Взгляните на Storage Access Framework
Изменить
Вот как вы можете получить InputStream
из вашего Uri
InputStream inputStream = getContentResolver().openInputStream(uri);
Немного короче, ожидает, что элемент будет в элементе, k возвратов.
for (var k=0,e=elem; e = e.previousSibling; ++k);
После комментария от Justin Dearing я рассмотрел свой ответ и добавил следующее:
Или если Вы предпочитаете "в то время как":
var k=0, e=elem;
while (e = e.previousSibling) { ++k;}
исходный вопрос состоял в том, как найти индекс существующего элемента DOM. Оба из моих примеров выше в этом ответе ожидают элемент быть элементом DOM и что элемент все еще существует в DOM. Они перестанут работать, если Вы дадите им несуществующий объект или объект, которые не имеют previousSibling. Более надежный путь был бы чем-то вроде этого:
var k=-1, e=elem;
while (e) {
if ( "previousSibling" in e ) {
e = e.previousSibling;
k = k + 1;
} else {
k= -1;
break;
}
}
, Если e пустой указатель или если previousSibling отсутствует в одном из объектов, , k -1.
Ответ RoBorg работает..., или Вы могли попробовать...
var k = 0;
while(elem.previousSibling){
k++;
elem = elem.previousSibling;
}
alert('I am at index: ' + k);
Я думаю единственный способ сделать, это должно циклично выполниться через детей родителя, пока Вы не оказываетесь.
var K = -1;
for (var i = myNode.parent.childNodes.length; i >= 0; i--)
{
if (myNode.parent.childNodes[i] === myNode)
{
K = i;
break;
}
}
if (K == -1)
alert('Not found?!');
используя фреймворк наподобие прототипа, вы можете использовать это:
$(el).up().childElements().indexOf($(el))