текстовая область с 100% шириной игнорирует ширину родительского элемента в IE7

matches() вернет true только в том случае, если полная строка соответствует. find() попытается найти следующее вхождение в подстроке, которое соответствует регулярному выражению. Обратите внимание на акцент на «следующий». Это означает, что результат вызова find() несколько раз может быть не таким. Кроме того, с помощью find() вы можете вызвать start(), чтобы вернуть позицию, подстроенную подстрокой.

final Matcher subMatcher = Pattern.compile("\\d+").matcher("skrf35kesruytfkwu4ty7sdfs");
System.out.println("Found: " + subMatcher.matches());
System.out.println("Found: " + subMatcher.find() + " - position " + subMatcher.start());
System.out.println("Found: " + subMatcher.find() + " - position " + subMatcher.start());
System.out.println("Found: " + subMatcher.find() + " - position " + subMatcher.start());
System.out.println("Found: " + subMatcher.find());
System.out.println("Found: " + subMatcher.find());
System.out.println("Matched: " + subMatcher.matches());

System.out.println("-----------");
final Matcher fullMatcher = Pattern.compile("^\\w+$").matcher("skrf35kesruytfkwu4ty7sdfs");
System.out.println("Found: " + fullMatcher.find() + " - position " + fullMatcher.start());
System.out.println("Found: " + fullMatcher.find());
System.out.println("Found: " + fullMatcher.find());
System.out.println("Matched: " + fullMatcher.matches());
System.out.println("Matched: " + fullMatcher.matches());
System.out.println("Matched: " + fullMatcher.matches());
System.out.println("Matched: " + fullMatcher.matches());

Будет выводиться:

Found: false
Found: true - position 4
Found: true - position 17
Found: true - position 20
Found: false
Found: false
Matched: false
-----------
Found: true - position 0
Found: false
Found: false
Matched: true
Matched: true
Matched: true
Matched: true

Итак, будьте осторожны при многократном вызове find(), если объект Matcher не был сброшен, даже когда регулярное выражение окружено с ^ и $, чтобы соответствовать полной строке.

9
задан Rob Cooper 29 August 2008 в 04:51
поделиться

10 ответов

Примените ширину к td, не table.

Править: @Emmett - ширина могла так же, как легко быть применена с помощью CSS.

td {
    width: 300px;
}

приводит к желаемому результату. Или при использовании jQuery Вы могли бы добавить ширину через сценарий:

$('textarea[width=100%]').parent('td').css('width', '300px');

Точка быть, существует больше чем один способ применить ширину к ячейке таблицы, если ограничения разработки препятствуют тому, чтобы Вы применили его непосредственно.

5
ответ дан 4 December 2019 в 21:13
поделиться

@Peter Meyer, Jim Robert

Я попробовал различные водосливные значения, напрасно.

Экспериментирование с различными значениями для атрибута переноса и стиля перехода на новую строку также не было плодотворно.

Править:

@dansays, seanb

Из-за некоторых неловких специализированных ограничений, ширина может только быть применена к таблице.

@travis

Установка стиля = "word-break:break-all"; вид обработанных! Это все еще переносится по-другому в IE7 и И следующие. Я приму этот ответ, если ничто лучше не подойдет.

2
ответ дан 4 December 2019 в 21:13
поделиться

Другая hacky опция, но единственная опция, которая работает на меня - ни одно из других предложений на этой странице, делает - должен перенести текстовую область в таблицу отдельной ячейки с фиксированной сервировкой.

<table style="width:100%;table-layout:fixed"><tr><td>
<textarea style="width:100%">longstringlongstringlongstringlongstringlongstringlongstringlongstringlongstringlongstringlongstringlongstringlongstringlongstring</textarea>
</td></tr></table>
2
ответ дан 4 December 2019 в 21:13
поделиться

Вы пробовали...

overflow: hidden;

??

Я не уверен, должно ли это быть в таблице текстовой области... экспериментируют немного

0
ответ дан 4 December 2019 в 21:13
поделиться

Другой очень hacky опция, если Вы застреваете с большим количеством ограничений, но знаете то, на что будет похоже окружение dom:

style="width:100%;width:expression(this.parentNode.parentNode.parentNode.parentNode.width +'px')"  

не симпатичный, но действительно работает в IE7.
Используя jQuery или подобный было бы намного более опрятное решение, но он зависит от других ограничений, которые Вы имеете.

1
ответ дан 4 December 2019 в 21:13
поделиться

IE также поддерживает word-break Свойство CSS 3.

0
ответ дан 4 December 2019 в 21:13
поделиться

Водосливное свойство является способом пойти. В частности, если Вы хотите, чтобы дополнительный текст был проигнорирован, можно использовать "overflow:hidden" в качестве свойства CSS на тексте.

В целом, когда браузер имеет небьющийся объект, такой как длинная строка без пробелов, он может иметь конфликт между ограничениями различного размера - те из строки (долго) по сравнению с ее (коротким) контейнером. Если Вы видите другое поведение в различных браузерах, они просто разрешают этот конфликт по-другому.

Между прочим, существует хороший прием, доступный для длинных строк - <wbr> тег. Если Ваш браузер будет видеть longstringlongstring, то он попытается приспособить его в контейнере как единственная, неповрежденная строка - но если он не может соответствовать, он повредит ту строку в половине в wbr. Это - в основном точка останова с неявным запросом для не повреждения там, если возможный (вид подобных дефис в печатаемых текстах). Между прочим, это - немного багги в некоторых версиях Safari, и Opera - проверяют эту quirksmode страницу для больше.

0
ответ дан 4 December 2019 в 21:13
поделиться

Лучшая вещь я мог найти, чтобы заставить его работать, немного hacky:
перенесите текстовую область с <div style="width:300px; overflow:auto;"> мог бы хотеть играть вокруг с водосливным значением

0
ответ дан 4 December 2019 в 21:13
поделиться

Я столкнулся с этой проблемой прежде. Это связано с тем, как HTML анализирует таблицу и ширины ячеек.

Вы - прекрасная установка 300 как ширина, пока содержание элемента никогда не может превышать это (установка отделения с определенной шириной внутри, и водосливное правило является моим любимым путем).

Но отсутствуйте решение как вышеупомянутое, минута, ЛЮБОЙ элемент продвигает Вас мимо той ширины, все ставки выключены. Элемент становится столь широким, как он имеет разместить содержание.

Дополнительная подсказка - монтирует в корпус Ваши значения ширины в любом наборе кавычек, вложит значение правильно (<table width='300'). Если кто-то приедет и изменит его на %, то это проигнорирует %, иначе.

К сожалению, Вы всегда собираетесь испытать затруднения при повреждении строк, которые не имеют 'естественных' перерывов в IE, если Вы не можете сделать что-то для разбивания их с помощью кода.

0
ответ дан 4 December 2019 в 21:13
поделиться

или, как насчет:

overflow: scroll;

Править:

Я на самом деле протестировал это. Я думаю, что поведение - такой, потому что ширина находится на таблице, которой я верю (у меня нет ничего для резервного копирования этого), я считал давно, что таблица width является предложенной шириной, но может быть расширена для размещения ее содержания.Не уверен. Я знаю, используете ли Вы a <DIV> вместо таблицы, это работает. Кроме того, если Вы применяете 300 пикселей шириной к содержанию <TD> элемент в противоположность <TABLE> элемент, это работает также. Кроме того, overflow: scroll ничего не делает!:P

Хорошее, броское поведение IE, наверняка!

0
ответ дан 4 December 2019 в 21:13
поделиться